隨筆 - 37  文章 - 14  trackbacks - 0
          <2009年6月>
          31123456
          78910111213
          14151617181920
          21222324252627
          2829301234
          567891011

          常用鏈接

          留言簿

          隨筆分類

          隨筆檔案

          文章分類

          相關鏈接

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          JDBC2.0 sql批量提交效率測試

          測試環境:

             springframework 1.0

                 數據庫:Informix 9.21.FC1

                 表結構:

                 Column name          Type                                    Nulls

          f1                   varchar(10,0)                           yes

          f2                   varchar(10,0)                           yes

          f3                   varchar(10,0)                           yes

          f4                   varchar(10,0)                           yes

          f5                   varchar(10,0)                           yes

          f6                   varchar(10,0)                           yes

          f7                   varchar(10,0)                           yes

          f8                   varchar(10,0)                           yes

          f9                   varchar(10,0)                           yes

          f10                  varchar(10,0)                           yes

          f1上建立索引

          測試情況:

          case 1SQL單個提交,不prepare,使用BaseDAOJdbcexecuteSql方法

          case 2SQL單個提交,prepare,方法如下:

          public void saveDataSinglePrepare(final List data) {

                  getJdbcTemplate().execute(insertData,

                      new PreparedStatementCallback() {

                                    public Object doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException {

                                        Iterator iter = data.iterator();

                                        while (iter.hasNext()){

                                            Object[] objs = (Object[]) iter.next();

                                            for(int i=0; i

                                                      ps.setObject(i+1, objs[i]);

                                                     }

                                                     ps.execute();

                                        }

                                        return null;

                                    }

                          }

              );

              }

          case 3SQL批量提交,使用BaseDAOJdbcexecuteBatch方法

          /**

           * Jdbc sql的批量操作

           * @param sql       sql語句

           * @param values 包含參數的ListList的每個元素是一個Object[]Object[]是一個單獨的sql操作所需的參數

           */

          public void executeBatch(final String sql, final List values){

              if (values.size() == 0) return ;

              getJdbcTemplate().batchUpdate(sql,

                  new BatchPreparedStatementSetter() {

                         public void setValues(PreparedStatement ps, int i) throws SQLException {

                             Object[] args = (Object[]) values.get(i);

                             for(int j=0; j

                                 ///log.debug(String.valueOf(j+1)+":"+args[j].toString());

                                        ps.setObject(j+1, args[j]);

                                       }

                      }

                      public int getBatchSize() {

                          return values.size();

                      }

                         }

              );  

          }

          case 4SQL批量提交,使用BaseDAOJdbcexecuteBatch2方法

          private static final int batch_size = 100;

          public void executeBatch2(final String sql, final List values){

              getJdbcTemplate().execute(sql,

                  new PreparedStatementCallback() {

                                public Object doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException {

                                    Iterator iter = values.iterator();

                                    int sqlCount = 0;

                                    while (iter.hasNext()){

                                        if (sqlCount >= batch_size){

                                            ps.executeBatch();

                                            sqlCount = 0;

                                            //log.info("executeBatch:" + sql);

                                        }

                                        Object[] args = (Object[]) iter.next();

                                        for(int i=0; i

                                               ps.setObject(i+1, args[i]);

                                              }

                                        ps.addBatch();

                                     sqlCount ++;

                                     log.debug("sqlCount:" + String.valueOf(sqlCount));

                                    }

                                   

                                    if (sqlCount > 0){

                                     ps.executeBatch();

                                     sqlCount = 0;

                                     //log.info("executeBatch:" + sql);

                                 }

                                       return null;

                                }

                  }

              );  

          }    

          posted on 2009-06-19 13:44 扭曲的鉛筆 閱讀(946) 評論(0)  編輯  收藏 所屬分類: J2EE
          主站蜘蛛池模板: 安平县| 恩平市| 绍兴市| 海兴县| 固始县| 始兴县| 东安县| 景德镇市| 胶南市| 永兴县| 罗定市| 长阳| 保德县| 津南区| 香河县| 晋州市| 罗平县| 肇庆市| 芮城县| 玉门市| 洪江市| 民和| 昌邑市| 宣汉县| 德江县| 射洪县| 汤阴县| 绵竹市| 涿州市| 集贤县| 三台县| 永善县| 同心县| 朝阳区| 博客| 和田县| 乌苏市| 岳池县| 临沂市| 招远市| 唐海县|