PreparedStatement接口的addBatch()方法,可以将SQL更新语句的一组参数添加到SQL命令中,对SQL更新语句涉及的表中记录进行批量更新。数据库记录的批处理更新需要addBatch()方法和executeBatch()方法共同完成。
案例1:使用SQL语句批处理操作在shoper表中插入多个店铺。
在demo包下新建SqlDemoTest11类。代码如下:
package demo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
* @ClassName: SqlDemoTest11
* @Description: 数据库编程(SQL语句批处理操作)案例1
* @author 编程训练营
* @date
*
*/
public class SqlDemoTest11 {
// 定义JDBC加载路径
static String jdbc = "com.mysql.cj.jdbc.Driver";
// 定义MySQL数据库的连接地址
static String mysqlurl = "jdbc:mysql://localhost:3306/shop?serverTimezone=GMT%2B8";
// 定义MySQL数据库的用户名
static String username = "root";
// 定义MySQL数据库的用户名登录密码
static String password = "~123456q";
/**
* @Title: main
* @Description: Java程序入口main方法
* @param @param args 参数
*
* @return void 返回类型 @throws
*/
public static void main(String[] args) {
Connection conn = null;
PreparedStatement prepareStatement = null;
try {
// 加载JDBC驱动
Class.forName(jdbc);
// 连接数据库
conn = DriverManager.getConnection(mysqlurl, username, password);
if (null != conn) {
System.out.println(conn);
String name = "打印机专卖店";
String brief = "打印机专业销售";
// 向shoper表中插入条记录
String sql = "insert into shoper(id,userId,name,brief,log,shopMoney,status,createDate)"
+ "values(?,?,?,?,?,?,?,?)";
// 实例化Statement对象
prepareStatement = conn.prepareStatement(sql);
// 批处理设置SQL语句更新参数
for( int i = 0; i < 10; i++ )
{
// 设置id字段的值
prepareStatement.setString(1,"0000" + i);
// 设置userId字段的值
prepareStatement.setString(2,"uoo" + i);
// 设置name字段的值
prepareStatement.setString(3,"店铺-" + i);
// 设置brief字段的值
prepareStatement.setString(4,"店铺结束-" + i);
// 设置log字段的值
prepareStatement.setString(5,"log" + i);
// 设置shopMoney字段的值
prepareStatement.setDouble(6,0.0);
// 设置status字段的值
prepareStatement.setInt(7, 0);
// 设置日期字段
java.util.Date date = new java.util.Date();
java.sql.Date sqldate = new java.sql.Date(date.getTime());
prepareStatement.setDate(8,sqldate);
prepareStatement.addBatch();
}
// 执行批处理
int row[] = prepareStatement.executeBatch();
System.out.println("更新了" + row.length + "条记录");
prepareStatement.close();
conn.close();
} else {
System.out.println("数据库连接失败");
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}SqlDemoTest11程序在shoper表中插入10条记录。程序使用for循环,将10条记录的SQL插入命令,通过addBatch()方法添加到PreparedStatement对象的批处理命令中。最后通过executeBatch()方法执行批处理命令。
批处理执行完成后,数据库shoper表被插入了10条记录。如下图所示:
