在Java中的事务期间SQLite_Busy?

时间:2016-12-19 16:36:00

标签: java sqlite jdbc transactions

我有一个包含10000条以上记录的CSV文件,每条记录长约1000个字符,可以添加到sqlite数据库。

这样做有效,但速度很慢:

try{

    while((line = reader.readLine()) != null){
       preparedStatement = connection.prepareStatement("BEGIN");
       preparedStatement.execute();


        //All prepared statements with inserts and selects

       preparedStatement = connection.prepareStatement("COMMIT");
       preparedStatement.execute();

    }
}catch(SQLException){

    preparedStatement = connection.prepareStatement("ROLLBACK");
    preparedStatement.execute();
}

为了加快速度,我只想做一个交易,所以我将其改为:

try{
    preparedStatement = connection.prepareStatement("BEGIN");
    preparedStatement.execute();

    while((line = reader.readLine()) != null){
        //All prepared statements
    }
    preparedStatement = connection.prepareStatement("COMMIT");
    preparedStatement.execute();

}catch(SQLException){
    preparedStatement = connection.prepareStatement("ROLLBACK");
    preparedStatement.execute();
}

但是在大​​约1000次插入后我得到了这个例外:

  

org.sqlite.SQLiteException:[SQLITE_BUSY]数据库文件被锁定(数据库被锁定)

这是什么?我非常确定它是使用数据库的唯一一项任务。我怎么解决呢?

谢谢!

0 个答案:

没有答案