更新Resultset时,Java Resultset不会保留更改的值

时间:2016-03-12 16:59:02

标签: java

此问题的基本代码是:

TYPE_SCROLL_SENSITIVE

当我更改字段并更新它时,然后移动到另一条记录并返回到我更改的字段,它将恢复到我进行更改之前的状态。如果我关闭并重新启动应用程序,则会反映更改。它似乎将更改提交到底层数据库,但不是将结果设置为自己。我尝试了不同的结果集参数,但CONCUR_UPDATABLEq = session.query(Website.id).\ join(Website.category_id).\ group_by(Category.id).\ having(func.count(Website.url) > 0) 应该是合适的。

当我点击NEXT或PREVIOUS转到另一个记录时,代码只是通过从结果集中抓取它们来设置文本字段。所以结果集只是没有保持或识别更改和结果集updateString和updateInt方法。

有人可以对此有所了解吗?

2 个答案:

答案 0 :(得分:1)

要确定结果集是否可以看到自己的更新,请致电:
DatabaseMetaData::ownUpdatesAreVisible

检查JDBC规范和JDBC驱动程序的文档以获取更多详细信息。

答案 1 :(得分:0)

也许你还没有结束你的陈述。

stmt.close()与try catch block一起使用。

Statement stmt = null;
    try {

    // your code here.
       stmt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,
       ResultSet.CONCUR_UPDATABLE);     

       rs=stmt.executeQuery(SQL);

       rs.updateInt("CUSTOMER_ID", newID);
       rs.updateString("NAME", company);
       rs.updateString("CITY", city);
       rs.updateString("STATE", state);
       rs.updateRow();
       conn.commit(); // this connection commit() method will solve your issue

    } catch (SQLException e ) {
        JDBCTutorialUtilities.printSQLException(e);
    } finally {
        if (stmt != null) { stmt.close(); }
    }

资源链接:

  1. https://docs.oracle.com/javase/tutorial/jdbc/basics/retrieving.html
  2. http://www.informit.com/articles/article.aspx?p=131026&seqNum=6