Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用UCanAccess将更新应用到结果集只会更新第一行_Java_Database_Ms Access_Jdbc_Ucanaccess - Fatal编程技术网

Java 使用UCanAccess将更新应用到结果集只会更新第一行

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 =

我正在尝试使用Java中的ucanaccess更新Microsoft access数据库中的多行。问题是,在更新第一行之后,并没有其他事情发生,就好像游标被关闭一样。这是我的密码:

    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()以外的任何解决方法。