1

CachedRowSet でインクリメント ID を持つテーブルに行を挿入しようとしています (私は Java wit Java DB を使用しています) が、次の SQLException を受け取りました:
java.sql.SQLException: 行の挿入に失敗し
ました...
SQLState: null
エラー コード: 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.");
4

2 に答える 2

1

これを試して crs.updateNull(1); crs.insertRow();

ここで、1 はあなたの PK です。MySQLで私のために働いた

于 2013-09-01T15:34:56.980 に答える