Java學習

          java,spring,structs,hibernate,jsf,ireport,jfreechart,jasperreport,tomcat,jboss -----本博客已經搬家了,新的地址是 http://www.javaly.cn 如果有對文章有任何疑問或者有任何不懂的地方,歡迎到www.javaly.cn (Java樂園)指出,我會盡力幫助解決。一起進步

           

          JDBC 查詢數據庫已經事物處理

          一套系統已做完了,結果發現了一個重大漏洞,沒做連接的事務處理.  
            比如說幾個INSERT.UPDATE一起,如果最后一個UPDATE出了問題,要將前面的INSERT.UPDATE都回滾回來.  
             
            我現在用的是TOMCAT服務器,不支持事務處理.數據庫用ORALCE.我知道可以setautocommit(false).rollback()來 處理,但這樣的話,改動量太大了(因為我有一個BEAN做數據庫的連接和增改查刪等操作),請問各位有沒有比較快的方式將所有JSP改過來?  
             
            原有代碼如下:  
             
            =======================================  
             
            package   db;  
             
            import   javax.naming.*;  
            import   javax.sql.*;  
            import   java.sql.*;  
            import   java.text.SimpleDateFormat;  
            import   java.util.Date;  
             
            public   class   DataBean{  
                java.sql.Connection   conn   =   null;  
                PreparedStatement   ps   =   null;  
                ResultSet   rs   =   null;  
             
                public   DataBean(){  
                    try{  
                        Class.forName("oracle.jdbc.driver.OracleDriver");  
                        conn   =   DriverManager.getConnection("jdbc:oracle:thin:@10.100.11.252:1521:proc","changchun","changchun");  
                        conn.setAutoCommit(true);  
                    }catch(Exception   e){  
                        e.printStackTrace();  
                    }  
                }  
             
                public   ResultSet   select(String   entity,String   prec){  
                    try{  
                        ResultSet   rs   =   null;  
                        ps   =   conn.prepareStatement("select   "+entity+"   from   "+prec);  
                        rs   =   ps.executeQuery();  
                        conn.rollback();  
                        return   rs;  
                    }catch(Exception   e){  
                        System.out.println(e);  
                        return   null;  
                    }  
                }  
             
                public   ResultSet   newselect(String   entity,String   prec){  
                    try{  
                        ResultSet   rs   =   null;  
                        ps   =   conn.prepareStatement("select   "+entity+"   from   "+prec,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);  
                        rs   =   ps.executeQuery();  
                        conn.rollback();  
                        return   rs;  
                    }catch(Exception   e){  
                        System.out.println(e);  
                        return   null;  
                    }  
                }  
             
                public   void   insert(String   value,String   prec){  
                    try{  
                        ps   =   conn.prepareStatement("insert   into   "+prec+"   values   "+value);  
                        ps.executeUpdate();  
                        conn.rollback();  
                        }catch(Exception   e){System.out.println(e);}  
                }  
             
                public   void   delete(String   sql){  
                    try{  
                        ps   =   conn.prepareStatement(sql);  
                        ps.executeUpdate();  
                        conn.rollback();  
                        }catch(Exception   e){System.out.println(e);}  
                }  
             
                public   void   update(String   table,String   prec){  
                    try{  
                        ps   =   conn.prepareStatement("update   "+table+prec);  
                        ps.executeUpdate();  
                        conn.rollback();  
                        }catch(Exception   e){System.out.println(e);}  
                }  
             
                public   static   boolean   validateDate(String   vDate)   {  
                                SimpleDateFormat   dateFormat   =   new   SimpleDateFormat();  
                                try   {  
                                        dateFormat.applyPattern("yyyy-MM-dd");  
                                        dateFormat.setLenient(false);  
                                        Date   date   =   dateFormat.parse(vDate);  
                                        return   true;  
                                }   catch   (Exception   e)   {  
                                        return   false;  
                                }  
                        }  
             
             
                public   void   close(){  
                    try{  
             
                        ps.close();  
                        conn.close();  
                        }catch(Exception   e){System.out.println(e);}  
                }  
             
            }  
            ===========================  
            提出一些小建議也有分.解決問題后給500分!!!  
            謝謝!!!



          ########################################
          首先你上面的代碼有問題,conn.rollback()怎么在數據庫操作后呢,如果此時conn.setAutoCommit(false);那么你什么也沒作,操作完數據庫就回滾,呵呵.  
             
            首先使用事務你必須先把構造函數中的conn.setAutoCommit(true);改為  
            conn.setAutoCommit(false);  
            如何想把異常都拋到jsp里,以下面的方法為例,  
              public   void   insert(String   value,String   prec){  
                    try{  
                        ps   =   conn.prepareStatement("insert   into   "+prec+"   values   "+value);  
                        ps.executeUpdate();  
                        conn.rollback();  
                        }catch(Exception   e){System.out.println(e);}  
                }  
            可以這樣寫  
             
            public   void   insert(String   value,String   prec)   throws   Exception    
            {  
                    try{  
                        ps   =   conn.prepareStatement("insert   into   "+prec+"   values   "+value);  
                        ps.executeUpdate();  
                        }catch(Exception   e)  
                        {  
                        throw   e;  
                        }  
                         
            }  
            這樣所有的Excepion就拋到你的jsp里了  
            在jsp里你這樣寫  
                DataBean   oTest   =   null;  
                try  
                {  
                oTest   =   new   DataBean();  
                 
                //此處加入你操作數據庫的方法  
                 
                oTest.conn.commit();  
                oTest.conn.close();  
                }catch(Exception   e)  
                {  
                e.printStackTrace();  
                try{  
                oTest.conn.rollback();  
                }catch(Exception   ee)  
                {  
             
                }  
                }finally  
                {  
                try  
                {  
                if(oTest.conn!=null)  
                oTest.conn.close();  
                }catch(Exception   e)  
                {  
             
                }  
                }  

          ##############################################


          轉:http://topic.csdn.net/t/20030519/12/1803615.html

          posted on 2009-07-09 09:37 找個美女做老婆 閱讀(544) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          統計

          公告

          本blog已經搬到新家了, 新家:www.javaly.cn
           http://www.javaly.cn

          常用鏈接

          留言簿(6)

          隨筆檔案

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 黑水县| 辽中县| 钟祥市| 梧州市| 杭州市| 灌阳县| 芒康县| 承德市| 二连浩特市| 东至县| 仙居县| 延吉市| 汶川县| 江油市| 宜阳县| 五常市| 禄劝| 贵州省| 清远市| 郯城县| 庆安县| 建水县| 鹿邑县| 伊春市| 玉树县| 邹平县| 嘉峪关市| 芦山县| 桃园市| 仙居县| 子洲县| 如东县| 琼结县| 探索| 新建县| 治多县| 湟源县| 离岛区| 垣曲县| 仪征市| 密山市|