JDBC高手請進,百思不得其解的bug
我的一個bean的下面這個方法運行有誤,想了N天不知道怎麼處理,請高手幫忙
=====================================================================
public boolean AuditingApp(int app_no,
String auditing_by,
String auditing_dt,
String rtc_rmk
) throws Exception {
Connection cnn = null;
PreparedStatement prmt = null;
PreparedStatement prmt1 = null;
DataSource das;
boolean lb_ok = true;
int i;
int j;
String sql = "update q_app_register set auditing_by=?, " +
"auditing_dt=?,rtc_rmk=?,app_result=? where app_no = ? ";
String sql2 = "update q_test_register set step = 'O ' where app_no = ? ";
das = getDataSource();
//System.out.println( "sql= "+sql);
try {
cnn = das.getConnection();
prmt = cnn.prepareStatement(sql);
prmt1 = cnn.prepareStatement(sql2);
prmt.setString(1, auditing_by);
prmt.setString(2, auditing_dt);
prmt.setString(3, rtc_rmk);
prmt.setString(4, "2 ");
prmt.setInt(5, app_no);
prmt1.setInt(1, app_no);
i = prmt.executeUpdate();
j = prmt1.executeUpdate();
if (i > 0) {
cnn.commit();
}
else {
cnn.rollback();
}
}
catch (java.sql.SQLException ex) {
lb_ok = false;
ex.printStackTrace();
}
finally {
prmt.close();
cnn.close();
}
return lb_ok;
}
=====================================
方法的功能說明: q_app_register於q_test_register記錄根據app_no對應,要求
若sql執行成功,則將sql,sql2的修改一起提交到數據庫(一個事務),否則回滾,取消
sql,sql2對數據庫的修改。即:如何把sql,sql2作為一個事務處理?
.......系統出錯情況:sql2修改成功了,sql卻沒有相應修改。
[解决办法]
cnn = das.getConnection();
cnn.setAutoCommit(false);
...
finally {
prmt.close();
cnn.setAutoCommit(true);
cnn.close();
}
[解决办法]
你的描述应该有问题吧
从你的代码看sql在sql2之前执行 最多前者(sql)执行成功,后者执行(sql2)失败 不可能有相反的结果啊
在事务处理之前要设置connection的autoCommit为false
这个属性的默认值 不同的数据库可能有不同的定义