ActiveJDBC批量插入和事务
ActiveJDBC batch insert and transaction
插入一批记录的推荐方法是什么,或者 none 如果数据库对任何插入操作都出现错误?
这是我当前的代码:
PreparedStatement ps = Base.startBatch("INSERT INTO table(col1) VALUES(?)");
for (MyModel m : myModels)
Base.addBatch(ps, m.getCol1());
Base.executeBatch(ps);
ps.close();
这会插入记录,直到第一个失败的记录(如果发生)。
我想要全部插入或不插入任何内容,然后我在考虑包装 executeBatch():
Base.openTransaction();
Base.executeBatch(ps);
Base.commitTransaction();
如果正确,我应该在try catch
中做Base.rollbackTransaction()
吗?
我还应该关闭 finally
块中的 ps.close()
吗?
谢谢!
事务处理的批处理操作与非批处理操作没有任何区别。请参阅:http://javalite.io/transactions#transacted-activejdbc-example 了解典型模式。
届时您将执行此操作:
List<Person> myModels = new ArrayList<>();
try{
Base.openTransaction();
PreparedStatement ps = Base.startBatch("INSERT INTO table(col1) VALUES(?)");
for (Person m : myModels){
Base.addBatch(ps, m.getCol1());
}
Base.executeBatch(ps);
ps.close();
Base.commitTransaction();
}catch(Exception e){
Base.rollbackTransaction();
}
这样,万一出现异常,您的数据将完好无损
插入一批记录的推荐方法是什么,或者 none 如果数据库对任何插入操作都出现错误? 这是我当前的代码:
PreparedStatement ps = Base.startBatch("INSERT INTO table(col1) VALUES(?)");
for (MyModel m : myModels)
Base.addBatch(ps, m.getCol1());
Base.executeBatch(ps);
ps.close();
这会插入记录,直到第一个失败的记录(如果发生)。
我想要全部插入或不插入任何内容,然后我在考虑包装 executeBatch():
Base.openTransaction();
Base.executeBatch(ps);
Base.commitTransaction();
如果正确,我应该在try catch
中做Base.rollbackTransaction()
吗?
我还应该关闭 finally
块中的 ps.close()
吗?
谢谢!
事务处理的批处理操作与非批处理操作没有任何区别。请参阅:http://javalite.io/transactions#transacted-activejdbc-example 了解典型模式。
届时您将执行此操作:
List<Person> myModels = new ArrayList<>();
try{
Base.openTransaction();
PreparedStatement ps = Base.startBatch("INSERT INTO table(col1) VALUES(?)");
for (Person m : myModels){
Base.addBatch(ps, m.getCol1());
}
Base.executeBatch(ps);
ps.close();
Base.commitTransaction();
}catch(Exception e){
Base.rollbackTransaction();
}
这样,万一出现异常,您的数据将完好无损