繁体   English   中英

如何在具有CachedRowSet增量ID的表中插入行?

[英]How to insert a row into a that table has an increment id with CachedRowSet?

我正在尝试向具有CachedRowSet增量ID的表中插入一行(我正在使用Java和Java DB),但是却得到以下SQLException:
java.sql.SQLException:插入行失败
在...
SQLState:空
错误代码: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();

crs.inertRow()引发SQLException。
如果表没有自动增量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.");

这是使用CachedRowSet插入行失败的重复。

不幸的是,这是由于API定义而发生的:

抛出:SQLException-如果发生数据库访问错误。 结果集并发性为CONCUR_READ_ONLY,如果在游标不在插入行上时调用此方法,或者未对插入行中的所有非空列都赋予非结果,则在封闭的结果集上调用此方法-空值

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

试试这个crs.updateNull(1); crs.insertRow(); crs.updateNull(1); crs.insertRow();

其中1是您的PK。 在MySQL中为我感到烦恼

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM