强制使用ORMLite for Java进行事务

时间:2014-04-05 05:37:38

标签: java sqlite ormlite

我有一个程序在本地SQLite数据库中执行少量插入(可能大约3000),但所有原始数据库访问都由ORMLite包装。我的问题是插入率非常低,大约每秒25次插入。另一个StackOverflow问题迫使我强迫代码使用事务,所以我读了ORMLite文档。

在ORMLite文档之后,我将代码更改为以下内容:

        // Wrap all the inserts in a batch for increased speed.
        Section.getDao().callBatchTasks(
            new Callable<Void>() {
                @Override
                public Void call() throws Exception {
                    int currFileNum = 0;

                    // For each file, extract its sections.
                    for (HtmlFile file : files) {
                        String sectionString = file.getTitle();
                        String[] path = StringUtils.split(sectionString, ",");
                        Section.createFromPath(path, file.getId()); // Performs 1-5 Section.create() statements for each html file processed.
                    }
                    return null;
                }
            });

此代码实际上不会影响插入速度。我也尝试使用TransactionManager.callInTransaction()代码,同样根据ORMLite文档,但这对提高速度没有任何作用。

1 个答案:

答案 0 :(得分:0)

  

我的问题是插入率非常低,大约每秒25次插入。

所以你说你要在SQLIte数据库中添加3000条记录,这需要2分钟才能完成?那真的很慢。你确定没有别的东西需要时间吗?您是否尝试过评论数据库调用并检查性能?

您可以尝试在3000之前关闭自动提交,然后再将其打开,而不是在事务中执行每个块。如下所示:

try {
   dao.setAutoCommit(false);
   ...
   insertBunchOfEntries();
   ...
} finally {
   dao.setAutoCommit(true);
}