26

Oracleに接続するためにJDBCを使用しています。connection.setAutoCommit(false)vsをテストconnection.setAutoCommit(true)したところ、結果は予想通りでした。

デフォルトでは、接続はautoCommit(true)[間違っていたら訂正してください]のように機能するはずですconnection.commit()が、呼び出されるまでレコードは挿入されません。デフォルトの動作に関するアドバイスはありますか?

String insert = "INSERT INTO MONITOR (number, name,value) VALUES (?,?,?)";

conn = connection; //connection  details avoided
preparedStmtInsert = conn.prepareStatement(insert);
preparedStmtInsert.execute();

conn.commit();
4

1 に答える 1

36

Oracle JDBCドキュメントから:

接続が作成されると、自動コミットモードになります。これは、個々のSQLステートメントがトランザクションとして扱われ、実行された直後に自動的にコミットされることを意味します。(より正確には、デフォルトでは、SQLステートメントは実行時ではなく、完了時にコミットされます。ステートメントは、すべての結果セットと更新カウントが取得されたときに完了します。ただし、ほとんどの場合、 、ステートメントは実行された直後に完了し、したがってコミットされます。)

もう1つは、接続作成の詳細を省略したため、推測しているだけです。一部のフレームワークを使用している場合、またはデータソースまたは接続プールから接続を取得しているautocommit場合はoff、それらのフレームワーク/プール/データソースによって解決される可能性があります。デフォルト設定を決して信用しないことです;-)

于 2012-06-13T19:58:07.300 に答える