java批处理

第一步:获取批处理的SQL语句集合:


第一种方式: 使用Statement对象:

public boolean executeBatch(ArrayList<String> sqls) {
Connection conn = null;
Statement stmt = null;
try {
// 得到数据库连接
conn = SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection(); //hibernate
conn.setAutoCommit(false);//关闭自动提交
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);

for (int i = 0; i < sqls.size(); i++) {
stmt.addBatch(sqls.get(i));// 将所有的SQL语句添加到PreparedStatement
}


// 执行SQl语句
stmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);//批量操作完成后打开自动提交功能
}
catch (Exception e1) {
LOGGER.error(e1, e1);
return false;
}
finally {
closeAll(conn, stmt, null);//关闭所有资源
}
return true;
}

第二种方式: 使用PreparedStatement对象:

public boolean executeBatch(ArrayList<String> sqls) {
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 得到数据库连接
conn = SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
conn.setAutoCommit(false);


for (int i = 0; i < sqls.size(); i++) {
pstmt = conn.prepareStatement(sqls.get(i));
pstmt.addBatch();// 将所有的SQL语句添加到Statement中
}


// 执行SQl语句
pstmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);
}
catch (Exception e1) {
LOGGER.error(e1, e1);
return false;
}...

......

以上两种方式容易SQL注入.第三种方式:与前两种方式写法类似,不过获取SQL语句参数的方法不同,可以有效防止SQL注入,这才是我们需要的:

public boolean executeBatch(int sqlsSize, int len, Object[] objs) { //sqlsSize为需要执行的SQL语句条数,len为参数个数,objs为参数,例子:insert into employee (name, city, phone) values (?, ?, ?)
Connection conn = null;
PreparedStatement pstmt = null;
try {
// 得到数据库连接
conn = SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection();
conn.setAutoCommit(false);


for (int i = 0; i < sqlsSize; i++) {
pstmt = conn.prepareStatement("insert into employee (name, city, phone) values (?, ?, ?)");
for(int j = 0; j < len; j++) {
pstmt.setObject(j, objs[j]);
}

pstmt.addBatch();// 将所有的SQL语句添加到PreparedStatement
}


// 执行SQl语句
pstmt.executeBatch();
conn.commit();
conn.setAutoCommit(true);
}
catch (Exception e1) {
LOGGER.error(e1, e1);
return false;
}
finally {
closeAll(conn, pstmt, null);
}
return true;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值