尝试使用H2数据库更新JDBC ResultSet时出现异常

时间:2014-12-15 08:38:15

标签: java database jdbc h2

我尝试使用ResultSet将行插入H2数据库(1.4.182)。通过调用insertRow,程序抛出异常。我不知道问题是什么。

例外是:

The result set is not updatable. The query must select all columns from a unique key.
Only one table may be selected. [90127-182]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345)
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.message.DbException.get(DbException.java:144)
    at org.h2.jdbc.JdbcResultSet.getUpdatableRow(JdbcResultSet.java:3081)
    at org.h2.jdbc.JdbcResultSet.insertRow(JdbcResultSet.java:2966)
    at JdbcResultSetUpdate.main(JdbcResultSetUpdate.java:26)

程序执行以创建ResultSet的SQL语句是:

"select NAME from TEST.TST_DOZENT"

TST_DOZENT由声明:

创建
"CREATE TABLE TEST.TST_DOZENT (NAME VARCHAR(50))", "Create TST_DOZENT-Tab"

因此query-statement不使用系统表,该表没有主键。

java语句对象由:

创建
con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

我无法理解问题是什么或我做错了什么。

我将不胜感激。

请你阅读。

1 个答案:

答案 0 :(得分:3)

该表需要具有主键或唯一索引,并且查询需要包含该列。例如:

CREATE TABLE TEST.TST_DOZENT (ID PRIMARY KEY, NAME VARCHAR(50));
SELECT ID, NAME FROM TEST.TST_DOZENT;