Jdbc DML 操作
Statement:静态SQL操作
每次操作都会将sql语句提交到数据库执行一次,性能比较低
// 1.加载驱动程序
Class.forName(driverName);
// 2.获取数据库连接
Connection conn = DriverManager.getConnection(url, user, password);
// 3.构建SQL语句
String sql = "insert into t_user(userid,username,password)values(seq_t_user.nextval,'abc','123456')";
// 4.执行SQL语句
Statement sts = conn.createStatement();
// 返回的结果是影响的行数
int count = sts.executeUpdate(sql);
System.out.println("影响的行数:" + count);
// 5.关闭资源
sts.close();
conn.close(); Jdbc DML 操作
PrepareStatement:动态sql操作 预编译操作
优点:性能比Statement高
Statement对象能做的操作Preparedstatement都能做
Preparedstatement能做的Statement不一定能做
通过PrepareStatement对象更新用户数据
execute:DDL操作
executeUpdate:DML操作
executeQuery:DQL操作
executeBatch:批量处理 一次性执行多条sql语句 // 1.加载驱动程序
Class.forName(driverName);
// 2.获取数据库的连接通道
Connection conn = DriverManager.getConnection(url, user, password);
// 3.构建SQL语句
String sql = "update t_user set password=? where userid=?";
// 4.执行sql语句
// 获取Statement对象
PreparedStatement ps = conn.prepareStatement(sql);
ps.setString(1, "hehe");
ps.setInt(2, 3);
int count = ps.executeUpdate();
System.out.println("影响的行数:"+count);
// 关闭资源
ps.close(); Jdbc查询:
// 1.加载驱动程序
Class.forName(driverName);
// 2.获取数据库连接通道
Connection conn = DriverManager.getConnection(url, user, password);
// 3.构建SQL语句
String sql = "select * from t_user order by userid";
// 4.执行SQL语句获取查询结果
PreparedStatement ps = conn.prepareStatement(sql);
// 执行查询 ResultSet 类似于我们讲的游标 迭代器
ResultSet rs = ps.executeQuery();// 其实并没有获取到数据,而是指向了第一条数据之前
// 判断是否有下一条记录并把该记录保存到ResultSet对象中
while(rs.next()){// 每循环一次取出一条新的记录
//int id = rs.getInt("userid");
int id = rs.getInt(1); // 通过列的下标取字段内容,从1开始
String userName = rs.getString("username");
String userPassword = rs.getString("password");
System.out.println(id+" "+userName+" "+userPassword);
}
// 5.关闭相关的资源
rs.close();
ps.close();
conn.close(); 批处理:
/**
* 通过Statement执行批处理操作
* 适用于执行多条不同的sql语句
* @throws Exception
*/
@Test
public void testStatementBatch() throws Exception {
conn = DbUtils.getConnection();
Statement sts = conn.createStatement();
sql1 = "insert into t_user(userid,username,password)values(seq_t_user.nextval,'a','b')";
sql2 = "update t_user set password='111' where userid=43";
// 添加批处理的sql语句
sts.addBatch(sql1);
sts.addBatch(sql2);
sts.executeBatch();
DbUtils.close(sts, conn); } /**
* 通过PreparedStatement对象执行批处理操作
* @throws Exception
* @throws ClassNotFoundException
*/
@Test
public void testPreparedStatement() throws Exception {
conn = DbUtils.getConnection();
sql = "insert into t_user(userid,username,password)values(seq_t_user.nextval,?,?)";
PreparedStatement ps = conn.prepareStatement(sql);
/*ps.setString(1, "a1");
ps.setString(2, "b1");
ps.addBatch();
ps.setString(1, "a2");
ps.setString(2, "b3");
ps.addBatch();*/
for(int i = 0 ; i < 10 ; i++){
ps.setString(1, "a"+i);
ps.setString(2, "b"+i);
ps.addBatch();
} ps.executeBatch();
DbUtils.close(ps, conn);
}

jdbc之Statement和Preparement的更多相关文章

  1. jdbc执行Statement接口的步骤

    jdbc执行Statement接口的步骤如下: 1)驱动注册程序: Class.forName(com.mysql.jdbc.Driver); 2)获取连接对象: Connection conn = ...

  2. JDBC的Statement对象

    以下内容引用自http://wiki.jikexueyuan.com/project/jdbc/statements.html: 一旦获得了数据库的连接,就可以和数据库进行交互.JDBC的Statem ...

  3. jdbc中Statement和PreparedStatement有什么区别?哪个性能更好?

    Statement和PreparedStatement的功能主要是对sql语句的执行 区别 (1)Statement每执行一条sql语句就需要生成一条执行计划,执行100条就需要100条执行计划Pre ...

  4. JDBC与Statement和PreparedStatement的区别

    一.先来说说,什么是java中的Statement:Statement是java执行数据库操作的一个重要方法,用于在已经建立数据库连接的基础上,向数据库发送要执行的SQL语句.具体步骤: 1.首先导入 ...

  5. JDBC PreparedStatement Statement

    参考:预编译语句(Prepared Statements)介绍,以MySQL为例 1. 背景 本文重点讲述MySQL中的预编译语句并从MySQL的Connector/J源码出发讲述其在Java语言中相 ...

  6. JDBC之Statement 接口的测试(存在sql注入风险)

    实现简单的登录功能 import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; impo ...

  7. JDBC之Statement、PreparedStatement和CallableStatement

    JDBC提供了Statement.PreparedStatement和CallableStatement三种方式来执行查询语句,其中Statement用于通用查询,PreparedStatement用 ...

  8. JDBC:Statement问题

    1.Statement问题  2.解决办法:通过PreparedStatement代替  实践: package com.dgd.test; import java.io.FileInputStrea ...

  9. jdbc 08: statement应用场景

    jdbc连接mysql,statement的应用场景 package com.examples.jdbc.o8_statement应用场景; import java.sql.*; import jav ...

随机推荐

  1. Docker的一些常用命令

    # systemctl start docker //启动docker # systemctl restart docker //重启docker # systemctl enable docker ...

  2. 初识Spark程序

    执行第一个spark程序 普通模式提交任务: bin/spark-submit \ --class org.apache.spark.examples.SparkPi \ --master spark ...

  3. 关于Unity3d的世界空间和本地空间的一点思考

    最近才开始学Unity3d,被这个本地空间和世界空间搞得有点晕头转向的.于是花了一点时间随便写了一点代码加深理解.代码如下: public class MoveX : MonoBehaviour { ...

  4. [翻译] KYCircularProgress

    KYCircularProgress Flexible progress bar written in Swift. 用Swift语言编写的灵活的进度条控件. Features Gradation C ...

  5. Compare DML To Both REDO And UNDO Size

    SUMMARY you can remember undo rule  the same to redo if you want demo rule that you can look up the ...

  6. 沉淀再出发:关于java中的AQS理解

    沉淀再出发:关于java中的AQS理解 一.前言 在java中有很多锁结构都继承自AQS(AbstractQueuedSynchronizer)这个抽象类如果我们仔细了解可以发现AQS的作用是非常大的 ...

  7. December 11th 2016 Week 51st Sunday

    If a thing is worth doing it is worth doing well. 如果事情值得做,那就做好. If it is worth doing, then it is wor ...

  8. OC基础数据类型-NSValue

    1.NSValue:将指针等复杂的类型存储为对象 struct sct { int a; int b; }sctt; NSValue * value = [[NSValue alloc] initWi ...

  9. [DBSDFZOJ 多校联训] 就

    就 背景描述 一排 N 个数, 第 i 个数是 Ai , 你要找出 K 个不相邻的数, 使得他们的和最大. 请求出这个最大和. 输入格式 第一行两个整数 N 和 K. 接下来一行 N 个整数, 第 i ...

  10. iOS NSRunloop的简单理解

    最近学习了下NSRunloop. 作一下简单的理解: 1.runloop与线程的关系,每一个线程创建是都会有伴有一个runloop诞生,runloop用来接收事件源,让线程执行事件.当没有事件处理时, ...