我正在使用SQLite的Java包装器,称为SQLiteJDBC - 这可能会对任何答案产生影响......
我有一个表格,我已经在GUI中显示,在该UI中,我有一个按钮,用于该表的单个行的字段.当我保存更改时,我这样做......
Statement stmt = connection.createStatement(); stmt.execute("update 'tableName' set 'fieldName'=1 where userid=1"); int updateCount = stmt.getUpdateCount();
我的连接有效,我没有抛出异常,getUpdateCount()返回'1'表示已经更新了一行.但是我的表格没有更新.我花了最后几个小时试图弄清楚发生了什么,但我没有运气.救命!!
UPDATE
问题似乎是它没有做出我所做的改变.在应用程序运行时,我的更改是可见的,但只要我关闭应用程序并重新打开它或直接检查数据库,我的更改就会丢失,我们又回到原点.这是怎么回事??!
自动提交设置为true,如果我将其设置为false并尝试提交,则会抛出异常.
我的问题是我依靠垃圾收集器来清理我使用过的ResultSet,我没有明确地关闭它们.
在SQLite中访问一个表会锁定整个数据库,因此这些使用仍然"打开"的ResultSet会阻止我在读取其内容后获得对表的写访问权.
如果您遇到此问题并且正在使用SQLite,则只需在完成后调用每个ResultSet上的close().(您可能也想尝试对任何PreparedStatements执行相同操作,我假设这些也会关闭他们用于创建的任何ResultSet,但我还没有尝试验证这一点.)