HSQLDB updateRow()不会更新

时间:2018-01-20 08:36:25

标签: java hsqldb

HSQLDB 2.4.0,JAVA 8u151:在可更新的RecordSet上显示updateXX()和updateRow()方法的一个非常简单的示例不会更新任何内容!?而是再次报告未更改的行。

在这个例子中,我当然可以使用SQL UPDATE语句,但在我的实际应用程序中,我绝对想要依赖可更新RecordSet的机制。怎么做?

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class Test {

    public static void main(String[] args) {

        String path = "c:/UpdateTest";
        String connectionString = "jdbc:hsqldb:file:" + path;
        try {
            Connection con = DriverManager.getConnection(connectionString);
            Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);

            stmt.executeUpdate("create cached table data (id int, name varchar(30));");
            stmt.executeUpdate("insert into data (id,name ) values (1, 'Jack')");
            stmt.executeUpdate("insert into data (id,name ) values (2, null)");
            stmt.executeUpdate("insert into data (id,name ) values (3, 'Jim')");

            ResultSet rs = stmt.executeQuery("SELECT * from data");
            while (rs.next()) {
                outputRow(rs);
            }
            System.out.println();

            rs.absolute(2);
            rs.updateInt("id", 5);
            rs.updateRow();
            rs.refreshRow();
            outputRow(rs); //what about the update??

        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    static void outputRow(ResultSet rs) throws SQLException {
        for (int i = 1; i <= rs.getMetaData().getColumnCount(); i++) {
            System.out.print(rs.getObject(i) + ", ");
        }
        System.out.println();
    }
}

1 个答案:

答案 0 :(得分:0)

如果rs.updateRow()成功,则该行将在数据库中更新。

即使在调用refreshRow()之后,HSQLDB ResultSet对象也不会显示已更改的行。