什么';下一个Java/SQL代码序列中的问题是什么?

什么';下一个Java/SQL代码序列中的问题是什么?,java,sql,jdbc,Java,Sql,Jdbc,我通过Java代码对access中的一个表进行了更新,但它不起作用。但是,当我将executeUpdate()的结果打印到控制台时,它显示1,但在数据库中,没有更改。你能告诉我哪里出了问题吗 System.out.println("here"); PreparedStatement st = conn.prepareStatement( "UPDATE StocProduseCuFactura SET cantitate = " + "cantitate - ? WHERE nu

我通过Java代码对access中的一个表进行了更新,但它不起作用。但是,当我将executeUpdate()的结果打印到控制台时,它显示1,但在数据库中,没有更改。你能告诉我哪里出了问题吗

System.out.println("here");
PreparedStatement st = conn.prepareStatement(
    "UPDATE StocProduseCuFactura SET cantitate = " +
    "cantitate - ? WHERE nume = ? and um = 'buc'");
st.setInt(1, cant);
st.setString(2, p.getNume());
System.out.println(st.executeUpdate());
st.close();

我忘了说,如果我在access中运行SQL代码,它就工作了。

您是否确保事务已提交?

正如其他人所说,事务是您可能需要关注的领域。尝试显式地将自动提交设置为true和false,然后尝试更新查询

conn.setAutoCommit(true);

此外,检查数据库上的锁。其他一些连接可能已经获取了锁并等待它被提交,但在这种情况下,您的更新查询根本不会被触发。但是试着重新启动数据库。

各位,很抱歉打扰你们,但我意识到这是我愚蠢的错误。在这一系列代码之后还有另一种方法,它使表与更新之前一样正确,这就是为什么我没有看到任何更改


非常感谢。

约翰尼·凯斯可能走对了路。很可能您的连接未设置为自动提交事务,因此当您关闭它时,事务将回滚,更改将被删除

你可以试着把

conn.setAutocommit(true); 

在顶部,看看它是否有区别。另一种可能性是“不能”始终为零。在这种情况下,您将设置cantitate=cantitate(即无更改),但update仍将报告满足“where”子句的每一行。

cant和
p.getNume()的值是否正确?还有
=cantitate-?
。这是故意的吗?您是否手动使用事务?您是否正确提交了事务?是的,它们是正确的。圣歌-?是来自数据库的数量减去要从中减少的数量在编写代码之前,我只是通过drivermanager获得连接,然后,我关闭它。它在其他情况下工作,如insert、select、delete,但在本例中为-UPDATE-它打印完成的更新数量,但在数据库中没有区别,当我检查itI时,我不使用事务,我只使用一个连接和一个PreparedStatement,带有executeUpdate()。但在其他情况下,它是有效的,在本例中,它也会显示完成的更新数量,但在数据库中,没有区别。请在关闭语句后尝试调用Connection对象上的commit()方法。因此,不要只执行st.close(),而是执行:st.close();conn.commit();