/**
* 预编译+批处理模式更新数据
* */
@SuppressWarnings("deprecation")
private boolean batchExecuteInsertTest(){
boolean isok = true;
Session session = this.getHibernateTemplate().getSessionFactory().openSession();
Connection conn=null;//连接
PreparedStatement pstm=null; //预编译语句
String pstmSql = null;
Savepoint sp = null;
try {
conn = session.connection();
conn.setAutoCommit(false); // 设置不自动提交
sp = conn.setSavepoint();//设置回滚点
pstmSql = "insert into test(id,name) values (?,?)";
pstm = conn.prepareStatement(pstmSql);
int recordNum = 1; // 计数器
int commit_size = 2;// 每次提交记录数2
pstm.setString(1, "5");//
pstm.setString(2, "5——列数据");
pstm.addBatch();
int total = 5;
//循环队列
for (int i = 1; i <= total; i++) {
recordNum++; // 计数
pstm.setString(1, i+"");//
pstm.setString(2, i+"列数据");//
pstm.addBatch();
// 每1000次提交一次
if (recordNum % commit_size == 0) {// 可以设置不同的大小;如50,100,500,1000等等
pstm.executeBatch();
conn.commit();
pstm.clearBatch();
conn.setAutoCommit(false);
pstm = conn.prepareStatement(pstmSql);
}
}
if (recordNum % commit_size != 0) { //执行剩余的批处理
pstm.executeBatch();
conn.commit();
}
} catch (Exception e) {
isok = false;
e.printStackTrace();
try {
if (conn != null) { // 回滚事务
conn.rollback(sp);//回滚到那个事务点上去
conn.commit();
}
} catch(Exception e2){
}
}finally{
try {
if (pstm != null) {
pstm.close();
pstm = null;
}
if (conn != null) {
conn.close();
conn = null;
}
if (session != null) {
session.close();
session = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
return isok;
}
我设置2条记录进行提交,当执行到第6条语句时,由于主键唯一性,无法执行。却没有事务回滚,不知道怎么回事?希望各位高手指点!
分享到:
相关推荐
我们可以使用addBatch()和executeBatch()方法选择标准的JDBC批处理,或者通过利用PreparedStatement对象的setExecuteBatch()方法和标准的executeUpdate()方法选择速度更快的Oracle专有的方法。要使用Oracle专有的...
8.3 事务提交与回滚 54 8.4 设置保存点 55 8.5 JTA事务的介绍 56 8.6 数据库的隔离级别介绍 56 8.6.1 未提交读 57 8.6.2 提交读 58 8.6.3 重复读 59 8.6.4 序列化读 60 8.7 小结 62 第九节 PreparedStatement接口的...
JDBC批处理: addBatch executeBatch Statement PreparedStatement Statement{ 1.获取连接 getConnection(); 2.创建Statement conn.createStatement(); 3.执行sql语句 String sql .... insert delete update ...
批处理操作:executeBath() 一次执行多个任务比较快 5.处理结果 1.ResultSet中行的第一列索引是1,不是0, 使用列名作为查询条件数据是大小写敏感的 2.可以设置结果集是否回滚,可否更新 6.关闭连接 按照 ResultSet...
3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. ...
3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. ...
3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 ...
3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 ...
3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. ...
3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. ...
在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6....
3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. ...
3.5. 在批处理模式下使用mysql 3.6. 常用查询的例子 3.6.1. 列的最大值 3.6.2. 拥有某个列的最大值的行 3.6.3. 列的最大值:按组 3.6.4. 拥有某个字段的组间最大值的行 3.6.5. 使用用户变量 3.6.6. 使用外键 3.6.7. ...