0

forサイクルを使用してMySQL DBに挿入します。

最初の挿入後に com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException を取得するため、自動インクリメントに問題があります。

ここにコード:

for (int i=0; i<numKeys; i++) {
try {
   stm1 = this.db_connection.prepareStatement("INSERT INTO mytable (Cod, Prop, Field, Value) VALUES (?,?,?,?)");
   stm1.setInt(1, Statement.RETURN_GENERATED_KEYS);
   stm1.setInt(2, 0);
   stm1.setString(3, aname);  
   stm1.setString(4, avalue);
       stm1.executeUpdate();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}  

Cod は自動インクリメント フィールドです。

4

3 に答える 3

2

自動インクリメントフィールドの場合、引数として渡す理由はありません。Insertステートメントに含めないでください。

stm1 = this.db_connection.prepareStatement("INSERT INTO mytable (Prop, Field, Value) VALUES (?,?,?)");

そして、以下の適切なsetIntメソッドを削除します。

于 2012-07-05T09:04:36.933 に答える
1

Statement.RETURN_GENERATED_KEYSはint定数であり、

同じ主キーで複数回追加しようとすると、追加に失敗します

于 2012-07-05T09:04:40.500 に答える
0

Codが自動インクリメントの場合、挿入する必要はありません。次のコードを試してください。

for (int i=0; i<numKeys; i++) {
try {
   stm1 = this.db_connection.prepareStatement("INSERT INTO mytable (Prop, Field, Value) VALUES (?,?,?)");
   stm1.setInt(1, 0);
   stm1.setString(2, aname);  
   stm1.setString(3, avalue);
   stm1.executeUpdate();
} catch (SQLException e) {
    e.printStackTrace();
}

}

于 2012-07-05T09:04:37.410 に答える