這是經過我的項目實驗后的可用方法:是用來實現添加、刪除、修改操作的共用方法。分為兩個方法,一個是設置PreparedStatement ps;對象參數的方法。一個是執行泛型PreparedStatement ps;對象的下面來看一下吧:

    /*

     * Author:spring

     * Date :09-03-06 20:28

     * PreparedStatement對象設置參數的方法

     */

    private PreparedStatement setPreparedStatement(PreparedStatement ps,

           List pars) throws SQLException {

       try {

           // 1.獲取數組的長度這樣能提高一點性能

           int x = pars.size();

           // 2.循環設置ps中需要的參數

           for (int i = 0; i < x; i++) {

              ps.setObject(i + 1, pars.get(i));

              System.out.println(pars.get(i));

           }

           // 3.添加到緩沖區中

           ps.addBatch();

           // 4.設置完參數的ps返回

           return ps;

       } finally {

          

       }

    }

    /*

     * 執行PreparedStatement泛型列表的方法

     */

    privateboolean exceurePreparedStatement(List<PreparedStatement> pss)

           throws SQLException {

       int x = 0;

       try {

           // 1.為手動提交

           this.conn.setAutoCommit(false);

           // 2.執行所有的PreparedStatement對象

           x = pss.size();

           for (int i = 0; i < x; i++) {

              pss.get(i).executeBatch();

           }

           // 3.沒有錯誤的話的就提交事務

           this.conn.commit();

           System.out.println("執行executeBatch()");

           // 4.如果提交成功那就返回成功true

           returntrue;

       } catch (Exception e) {

           // 出現異常回滾事務

           e.printStackTrace();

           System.out.println("執行批量時error");

           this.conn.rollback();

           //個性化異常

           thrownew MyException("page.error.1000","1000 數據執行的批量出錯.");

           //throw new SQLException();

       } finally {

           // 最后把手動提交改為自動提交

           this.conn.setAutoCommit(true);

           // 關閉不用的資源

           for (int i = 0; i < x; i++) {

               DBUtils.close(pss.get(i));

           }

       }

    }

//下面來介紹一下它們的用法

要實現一個用戶添加的功能,在添加的同時還要往log日志表中添加是誰操作的

這就要用到事務處理了

/*

     *添加用戶

     */

    public Boolean add_Users() throws SQLException {

       try {

           // 1.要執行的sql語句

           sql1 = new StringBuilder()

           .append("insert into spring_users(U_ID,u_Name,u_Password,u_Email,u_State)")

           .append(" values(SEQ_USERS.NEXTVAL,?,?,?,?)");

           // 添加日志

           sql2 = new StringBuilder()

                  .append("insert into SPRING_LOG(L_ID,L_NAME,U_ID,L_MESSAGE,L_DATE)")

                  .append(" values(SEQ_LOG.nextval,?,?,?,?)");

           // 2.要設置的參數列表

           pars1 = new ArrayList();

           pars1.add(dto.get("u_Name")); // 用戶名

           pars1.add(dto.get("u_Password")); // 用戶密碼

           pars1.add(dto.get("u_Email")); // 用戶E-email

           pars1.add(dto.get("u_Rating"));//權限與用戶狀態

           // 獲取當前操作員的u_id

           String u_Id = (String) dto.get("u_Id");

           pars2 = new ArrayList();

           pars2.add("SPRING_USERS"); // 設置1 操作的表名

           pars2.add(u_Id); // 設置2 操作人id

           pars2.add("這是用戶添加操作:用戶名:" + this.dto.get("u_Name"));// 設置3

                                                        // 描述看看是不是添加操作

           pars2.add(Tools.getSqlTimestamp()); // 設置4 操作時間

           // 3.編譯sql語句并設置參數

           pss = new ArrayList<PreparedStatement>();

           ps1 = this.conn.prepareStatement(sql1.toString());

           ps2 = this.conn.prepareStatement(sql2.toString());

           // 設置參數

           pss.add(this.setPreparedStatement(ps1, pars1));

           pss.add(this.setPreparedStatement(ps2, pars2));

           // 4.調用執行sql語句的方法

           returnthis.exceurePreparedStatement(pss);

       } finally {

           // 5.釋放使用資源

           DBUtils.close(ps1);

           DBUtils.close(ps2);

       }

    }

這里的一些方法是我封裝的像獲取當前用戶的u_id , String u_Id = (String) dto.get("u_Id");這是我用的構造傳過來的dto所以我們不用管它;

分析一下用法:

1. 設置sql語句

2. 編譯sql語句(用PreparedStatement

3. 定義一個泛型PreparedStatement

4. 設置PreparedStatement的參數返回來添加到泛型里

5. 調用執行泛型中的PreparedStatement 對象

6. 關閉不需要的資源

7. 這上面是我開發時的源碼大家可以直接拿去用