ActiveJDBC批量插入和交易

时间:2015-09-17 20:57:19

标签: activejdbc

如果数据库引发任何插入错误,推荐的插入一批记录的方法是什么? 这是我目前的代码:

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();

如果正确,我应该在某些Base.rollbackTransaction()try catch吗? 我是否还要关闭ps.close()区块中的finally

谢谢!

1 个答案:

答案 0 :(得分:0)

事务处理批处理操作与非批处理操作没有任何不同。请参阅: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();
    }

这样,如果出现异常,您的数据就完好无损