重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

Windows2K
MYSQL
Javaでデータベース更新プログラムを作成しています。
しかしBatch処理の中でエラーが発生したときrollbackが正しく効きません。下にコードを示します。何か間違えているところがあれば指摘してください。


Connection con = null;
Statement stmt = null;
try {

Class.forName("com.mysql.jdbc.Driver");

con = DriverManager.getConnection("jdbc:mysql://SUN:3306/TestDB", "sa", "sa");

con.setAutoCommit(false);

stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);

stmt.addBatch( "UPDATE TblA SET colB=11" WHERE colA=1);
stmt.addBatch( "UPDATE TblA SET colB=12" WHERE colA=2);
stmt.addBatch( "UPDATE TblA SET colB=13" WHERE colA=3);
stmt.addBatch( "UPDATE TblA SET colB=14" WHERE colA=4);
stmt.addBatch( "UPDATE TblA SET colB=15" WHERE colA=5);

// ↓このあとエラーになるSQLをいれてExceptionを発生させたんですが、
// 上のUpdate文はすべて更新されてしまいました。★★★★★★★?????????
stmt.addBatch( "UPDATE TblA SET colB='ABD' WHERE colB=10" );

int [] updateCounts = stmt.executeBatch();

con.commit();
stmt.close();
con.close();

} catch(Exception e) {
try {
con.rollback();
System.out.println("ROLL BACK"); // ★★★ここまで正しく表示されます。
}
catch (Exception ex) {
System.err.println("rollback error: " + ex.getMessage() );
}
}

A 回答 (1件)

MySQLはトランザクションモードで運用してますか?


デフォルトではオートコミットのみが有効になります。

参考URL:http://homepage2.nifty.com/sak/w_sak3/doc/sysbrd …
    • good
    • 1
この回答へのお礼

ご回答ありがとうございます。
おかげさまで解決できました。
今後ともよろしくお願いします。

お礼日時:2004/02/26 12:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!