gpt4 book ai didi

java - 如何使用 CachedRowSet 将行插入到具有增量 id 的表中?

转载 作者:行者123 更新时间:2023-11-30 04:26:13 25 4
gpt4 key购买 nike

我试图将一行插入到具有 CachedRowSet 增量 id 的表中(我正在使用 Java wit Java DB),但出现以下 SQLException:
java.sql.SQLException:插入行失败
在...
SQL状态:空
错误代码:0
消息:插入行失败

这是我的代码片段:

private static String urlString = "jdbc:derby:testdb;create=true";
private static String userName = "testUser";
private static String password = "testPassword";
...

CachedRowSet crs = new CachedRowSetImpl();
crs.setUrl(urlString);
crs.setUsername(userName);
crs.setPassword(password);
crs.setCommand("SELECT * FROM test_table");
crs.execute();

crs.moveToInsertRow();
crs.updateString("str_value", "testValue");
crs.insertRow();
crs.moveToCurrentRow();
crs.acceptChanges();

SQLException 是从 crs.inertRow() 引发的。
如果表没有自动增量 ID,则 CachedRowSet 可以很好地工作。
我怎样才能成功地做到这一点?

其他细节:
我使用以下代码来创建我的表:

conn = DriverManager.getConnection(urlString, userName, password);
Statement stmt = conn.createStatement();
stmt.execute("CREATE TABLE test_table("
+ "id INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1),"
+ "str_value VARCHAR(20) NOT NULL,"
+ "CONSTRAINT primary_key PRIMARY KEY (id))");
System.out.println("Talbe test_table created.");

最佳答案

这是 Failed on insert row using CachedRowSet 的重复项.

不幸的是,发生这种情况是因为API definition :

Throws: SQLException - if a database access error occurs; the result set concurrency is CONCUR_READ_ONLY, this method is called on a closed result set, if this method is called when the cursor is not on the insert row, or if not all of non-nullable columns in the insert row have been given a non-null value

您最好使用JdbcRowSetImpl
如果删除 id 列的 NOT NULL 约束,则只能坚持使用 CachedRowSet。不幸的是,这也意味着消除 PK 约束。我认为这是一个太大的牺牲,但要么就是这样,要么就没有 CachedRowSet

关于java - 如何使用 CachedRowSet 将行插入到具有增量 id 的表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15807649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com