Java 使用UCanAccess将更新应用到结果集只会更新第一行
我正在尝试使用Java中的ucanaccess更新Microsoft access数据库中的多行。问题是,在更新第一行之后,并没有其他事情发生,就好像游标被关闭一样。这是我的密码:Java 使用UCanAccess将更新应用到结果集只会更新第一行,java,database,ms-access,jdbc,ucanaccess,Java,Database,Ms Access,Jdbc,Ucanaccess,我正在尝试使用Java中的ucanaccess更新Microsoft access数据库中的多行。问题是,在更新第一行之后,并没有其他事情发生,就好像游标被关闭一样。这是我的密码: Connection con = DriverManager.getConnection("jdbc:ucanaccess://"+ filepath); String qry = "SELECT * FROM Elenco_Aziende"; Statement stmtautisti =
Connection con = DriverManager.getConnection("jdbc:ucanaccess://"+ filepath);
String qry = "SELECT * FROM Elenco_Aziende";
Statement stmtautisti = on.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE,ResultSet.HOLD_CURSORS_OVER_COMMIT);
String qryautisti = "SELECT * FROM Elenco_Autisti";
ResultSet rsautisti = stmtautisti.executeQuery(qryautisti);
while (rsautisti.next()) {
rsautisti.updateString("Problemi", "Nessuno");
rsautisti.updateRow();
}
执行后,第一行被更新…这是ucanaccess的已知错误还是其他错误 这个问题似乎与HSQLDB的行为有关(UCanAccess使用“引擎盖下”)。根据 在自动提交模式下,所有ResultSet对象都是只读且可保留的 因此,为了能够更新结果集,我们需要在打开它之前
con.setAutoCommit(false)
,然后执行con.commit()
将更改写回数据库
有关此问题的更多讨论,请参见UCanAccess论坛。不是MS Access专家,而是一般情况下-与其单独更新每条记录,不如运行
UPDATE Elenco_Aziende SET Problemi='Nessuno'
并让DB为您处理它?@Sva.Mu True,尽管有时代码并不重要或不重要“并非真正适用于现实世界”只是为了说明这一点。实际上问题是我不必更新“所有”行,但我必须对行进行循环,并且对于每一行,根据一些额外的条件,我决定是否更新它们。在对问题进行故障排除时,我甚至得到了一个像我描述的那样的简单循环:While(rsautisti.next()){rsautisti.updateString(“Problemi”,“Nessuno”);rsautisti.updateRow();}只更新第一条记录。此外,如果尝试解决方案Sva.Mu建议比我的方案简单,我得到错误“UCAExc:::3.0.1用户缺少权限或找不到对象:Problemi“…现在真的很困惑,请帮助我在Sva.Mu sql语句中,表名是错误的(而sql和建议在形式上都是正确的)。它应该是:更新Elenco_Autisti SET Problemi='Nessuno',而不是更新Elenco_Aziende SET Problemi='Nessuno'。我无法重现您的问题:在非常类似的情况下,我可以更新每个结果集行。我会再试一次,让您知道。大家好,谢谢我找到了一个解决方法…请在链接中查看相应的Gord答案,您不需要除了在执行查询之前放置con.setAutoCommit(false)和在循环之后放置con.commit()以外的任何解决方法。