2

executeUpdateオブジェクトのメソッドで実行された SQL INSERT ステートメントがPreparedStatement、SQLException をスローせずに 0 を返す条件はありますか?

例えば:

String query = "INSERT INTO mytable (column1,column2) VALUES (5,6)";
PreparedStatement preparedStatement = connection.prepareStatement(query);
if(preparedStatement.executeUpdate()!=1){
// A strange error has occurred
} else{
// do what ever
}

なぜ私は尋ねるのですか?私は現在、返される行数が 1 に等しいことを常に確認していますが、1 以外の値を返してはならない場合、それはやり過ぎではないかと思います。

4

4 に答える 4

10

それで試してみたところ、はい、ステートメント0で戻り値を取得できます。これは、別のテーブルに行INSERTがない場合に発生する可能性があります。たとえば、次のようにして、同じスキーマを持ち、空であるとします。SELECT * FROMINTOdomaindomain2domain2

Connection con = dataSource.getConnection();
PreparedStatement ps = con.prepareStatement("INSERT INTO domain SELECT * FROM domain2");
System.out.println(ps.executeUpdate());

印刷し0ます。

の戻り値を使用したのexecuteUpdateは、DELETE1 つの行のステートメントを使用して、それが以前に存在し、削除されたことを確認したときだけです。と一緒に使うべきではないと思いますINSERT

于 2013-08-15T18:40:08.780 に答える