Sqlite + Java:表没有更新

我正在使用SQLite的Java包装器,称为SQLiteJDBC – 这可能与任何答案有关…

我有一个表,我已经在GUI中显示,在该UI中,我有一个按钮,用于该表的单个行的字段。 当我保存更改时,我这样做……

Statement stmt = connection.createStatement(); stmt.execute("update 'tableName' set 'fieldName'=1 where userid=1"); int updateCount = stmt.getUpdateCount(); 

我的连接有效,我没有抛出exception,getUpdateCount()返回’1’表示已经更新了一行。 但是我的表格没有更新。 我花了最后几个小时试图弄清楚发生了什么,但我没有运气。 帮帮我!!

UPDATE

问题似乎是它没有做出我所做的改变。 在应用程序运行时,我的更改是可见的,但只要我关闭应用程序并重新打开它或直接检查数据库,我的更改就会丢失,我们又回到原点。 这是怎么回事??!

自动提交设置为true,如果我将其设置为false并尝试提交,则会抛出exception。

我的问题是我依靠垃圾收集器来清理我使用过的ResultSet,我没有明确地关闭它们。

在SQLite中访问一个表会锁定整个数据库,因此这些使用仍然“打开”的ResultSet会阻止我在读取其内容后获得对表的写访问权。

如果您遇到此问题并且正在使用SQLite,则只需在完成后调用每个ResultSet上的close()。 (您可能也想尝试对任何PreparedStatements执行相同的操作,我假设这些也会关闭他们用于创建的任何ResultSet,但我还没有尝试validation这一点。)

我使用sqlitejdbc-v056.jar尝试了你的例子,它工作正常,即使使用单引号也是如此。

您可以重写您的调用以使用executeUpdate ,但这不会产生任何影响:

 int updateCount = stmt.executeUpdate("update 'tableName' set 'fieldName'=1 where userid=1"); 

确保使用setAutoCommit (无论如何应该默认为true

 connection.setAutoCommit(true); 

或者在更新后明确地执行commit

 connection.commit(); 

仔细检查您是否正在连接到正确的数据库。 如果问题仍未解决,请尝试在更新之前之后对该记录执行SELECT ,以查看该值是否已更改。


原始答案

您是否尝试删除tableNamefieldName周围的单引号?

否则,这些将被视为字符串,这没有任何意义。 从文档:

通过将字符串括在单引号(’)中形成字符串常量