PreparedStatement 以及事務的注意事項


a).PreparedStatement 可以進行批量操作,但是與Statement有一定的區別

       1.  Statement可以進行不同sql語句的批量操作
            即可以同時進行   crud  操作.

                String sql1=xxx;
                String sql2=xxx;
                String sql3=xxx;
                Statement statement=conn.createStatement();
                statement.addBatch(sql1)  ;
                statement.addBatch(sql2);
                statement.addBatch(sql3);

                statement.executeQuery(sql)
                or
            statement.executeUpdate(sql)

        2. PreparedStatement  不能執行不同的sql語句,  只能執行一條類型的sql語句,但是可以參數不同

            String sql="insert into table values(?,?,?,?,?)";
            PreparedStatement  pstm=conn.preparedStatement  (sql);
            pstm.setString(1,xx);
            pstm.setString(2,xx);
            pstm.setString(3,xx);
            pstm.setString(4,xx);
            pstm.addBatch();
            pstm.setString(1,xx);
            pstm.setString(2,xx);
            pstm.setString(3,xx);
            pstm.setString(4,xx);
           pstm.addBatch();

            pstm.executeQuery();
           or
            pstm.executeUpate();

b) 注意這些批量操作,應該使用開啟事務

        開啟事務:
        1.需要去看數據庫是否支持事務,更換引擎為InnodDB
        2.有些版本的navicat有一個開啟事務的按鈕
        3.在Dao層中,可以使用conn.setAutoCommit(false)   默認為true,這里設置為false,可以阻止自動提交
        //在進行完操作后,應該手動提交
        conn.commit();
        //如果出錯, 需要回滾事務,那么我們可以在catch中進行事務的回滾操作
            //首先判斷conn是否關閉了 
            if(!conn.isClosed)
            {
                //沒有關閉進行回滾
                    conn.rollback();
                //隨你...
                    conn.setAutoCommit(true);
            }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM