我一直有这个问题已经有一段时间没有理解为什么会这样。在我的应用程序中,我与数据库进行了很多交互,并根据发生的情况打开和关闭自动提交。但是,用户可以随时在数据库上使用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,但没有任何影响。查询已完成,并且应用程序中的所有内容都已正常加载,为什么说这些语句仍在发生?我不会改变连接或声明。