Sqlite错误:当没有语句应该是正在进行的语句

时间:2017-01-07 00:33:58

标签: java sqlite

我一直有这个问题已经有一段时间没有理解为什么会这样。在我的应用程序中,我与数据库进行了很多交互,并根据发生的情况打开和关闭自动提交。但是,用户可以随时在数据库上使用VACUUM来帮助减小文件大小,除非它出错。

// org.sqlite.SQLiteException: [SQLITE_ERROR] SQL error or missing database (cannot VACUUM - SQL statements in progress)
// The error above for this:
if(!con.getAutoCommit()) {
    con.commit();
    con.setAutoCommit(true);
}
s.execute("VACUUM"); // on this line

在启动时,从数据库中选择了几个项目(最多1到5行),我可以很好地完成真空。在我做了一个选择连接几个表的几百行之后,我在尝试VACUUM时遇到了这个错误。作为这些查询的示例:

// Inside a PreparedStatement
SELECT * FROM tableV 
LEFT JOIN (SELECT tableV.v_id, count(tableV.v_id) as c_count FROM tableV 
    LEFT JOIN tableC on tableV.v_id = tableC.v_id 
    GROUP BY tableV.v_id 
    ORDER BY c_count DESC) AS cc ON cc.v_id = tableV.v_id 
LEFT JOIN tableP ON tableP.c_id = tableV.c_id 
WHERE tableV.v_id IN ( 
    SELECT v_id FROM tableVG 
    LEFT JOIN tableGiG ON tableVG.gi_id = tableGiG.gi_id 
    LEFT JOIN tableG ON tableG.g_id = tableGiG.g_id 
    WHERE g_name = ?) 
ORDER BY tableV.publish_date DESC

// Inside a PreparedStatement
SELECT * FROM gitem_list 
LEFT JOIN tableGi ON tableGi.type_id = gitem_list.type_id 
LEFT JOIN tableGiG ON tableGiG.gi_id = gitem_list.gi_id 
LEFT JOIN tableG ON tableG.g_id = tableGiG.g_id 
WHERE g_name = ?

我尝试在查询后关闭PreparedStatement和ResultSet,但没有任何影响。查询已完成,并且应用程序中的所有内容都已正常加载,为什么说这些语句仍在发生?我不会改变连接或声明。

0 个答案:

没有答案