Sqlite+Java:表未更新

Sqlite+Java:表未更新,java,sqlite,Java,Sqlite,我正在为SQLite使用一个名为的Java包装器-这可能对任何答案都有影响 我有一个在GUI中显示的表,在该UI中,我有一个用于该表的单个行的字段的按钮。当我保存更改时,我会这样做 Statement stmt = connection.createStatement(); stmt.execute("update 'tableName' set 'fieldName'=1 where userid=1"); int updateCount = stmt.getUpdateCount();

我正在为SQLite使用一个名为的Java包装器-这可能对任何答案都有影响

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

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

int updateCount = stmt.getUpdateCount();
我的连接有效,没有引发异常,getUpdateCount返回“1”,表示有一行已更新。但是,我的表没有更新。我花了几个小时试图弄清楚到底发生了什么,但我一点运气都没有。救命

更新

问题似乎是它没有承诺我所做的改变。当应用程序运行时,我的更改是可见的,但只要我关闭应用程序并重新打开它或直接检查数据库,我的更改就会丢失,我们就回到了原点。发生什么事了


自动提交设置为true,如果我将其设置为false并尝试提交,则会引发异常。

我尝试使用您的示例,它运行良好,即使使用单引号

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

int updateCount =
      stmt.executeUpdate("update 'tableName' set 'fieldName'=1 where userid=1");
无论如何,请确保使用默认值为true

或在更新后明确执行以下操作:

connection.commit();
再次检查您是否连接到正确的数据库。如果问题仍未解决,请尝试在更新前后对该记录执行选择,以查看值是否已更改

原始答复:

您是否尝试删除tableName和fieldName周围的单引号

否则,这些将被视为字符串,这毫无意义。从

字符串常量是通过将字符串括在单引号中形成的


我的问题是,我依靠垃圾收集器来清理我使用过的结果集,而不是显式地关闭它们

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


如果您有这个问题,并且正在使用SQLite,那么在处理完每个结果集后,只需调用close即可。您可能还想尝试对任何PreparedStatements执行相同的操作,我假设这些语句也会关闭它们用于创建的任何结果集,但我还没有尝试验证这一点。

tableName和fieldName是变量,还是表和字段的实际名称?如果您只需要将变量连接起来,那么我上面的SQL对于我的实际示例来说效果很好,其中表名的形式为'foo.bah'。诚然,使用带有“fieldName”的引号是不必要的,但不管有没有,似乎都可以。
connection.commit();