JDBC数据库批修改工具

一般我们在利用JDBC操作数据库时,会把一些基本的修改与查询做成工具类以方便其他模块进行调用,诸如commonQuery(String sql,Object args)commonUpdate(String sql,Object args)等等。

但是某次操作需要多次操作数据库,而每次操作都需要频繁的调用这个普通的工具类,频繁的打开和关闭对数据的连接,会给数据库带来一些性能上面的影响。

所以这里介绍一种利用批处理来一次性运行同一语句,不同参数的工具类。

关键点

将需要批处理的参数转换为Object[][]数组的形式传递给工具类。

批处理工具示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public static int[] commonBatchUpdate(String sql,Object[]...args ){
Connection connection = null;
PreparedStatement pStatement = null;
try {
connection = DBUtils.getConnection();
pStatement = connection.prepareStatement(sql);
// 第一层循环遍历并将语句添加进Batch里面
for (int i = 0; i < args.length; i++) {
// 第二层循环遍历给每一条语句的占位符赋值
for(int j=0;j<args[i].length;j++){
pStatement.setObject(j + 1, args[i][j]);
}
pStatement.addBatch();
}
// 进行批处理并返回结果
return pStatement.executeBatch();
} catch (SQLException e) {
e.printStackTrace();
} finally {
DBUtils.closeAll(pStatement, connection);
}
return null;
}

调用代码示例

调用代码需要对参数进行一些处理,以适应批处理工具类的第二个参数Object[][]

1
2
3
4
5
6
7
8
9
   public int[] batchAdd(List<OrderDetail> orderDetailList) {
String sql="insert into t_order_detail( goodsid, goodsname, goodsprice) values(?,?,?)";
// 需要将数据进行处理成为一个二维数据的形式
Object[][] objects=new Object[orderDetailList.size()][3];
for(int i=0;i<orderDetailList.size();i++){
objects[i]=new Object[]{orderDetailList.get(i).getGoodsid(),orderDetailList.get(i).getGoodsname(),orderDetailList.get(i).getGoodsprice()};
}
return DBManager.commonBatchUpdate(sql, objects);
}
-------------本文结束感谢您的阅读-------------