[英]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.