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();
}
}
答案 0 :(得分:0)
如果rs.updateRow()成功,则该行将在数据库中更新。
即使在调用refreshRow()之后,HSQLDB ResultSet对象也不会显示已更改的行。