首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

JDBC高手請進,百思不得其解的bug,该怎么处理

2012-01-20 
JDBC高手請進,百思不得其解的bug我的一個bean的下面這個方法運行有誤,想了N天不知道怎麼處理,請高手幫忙

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
这个属性的默认值 不同的数据库可能有不同的定义

热点排行