隨筆 - 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 包含參數的List,List的每個元素是一個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
          主站蜘蛛池模板: 白水县| 石城县| 五原县| 民勤县| 高安市| 怀宁县| 盘山县| 疏附县| 宝山区| 永济市| 兴国县| 五河县| 柞水县| 华容县| 宿迁市| 宜君县| 岳阳市| 洛浦县| 应城市| 油尖旺区| 澄迈县| 玛沁县| 凉城县| 乳山市| 东乌| 通州区| 虎林市| 湘潭市| 边坝县| 西宁市| 渭南市| 阿拉尔市| 旅游| 辽宁省| 射阳县| 富裕县| 长春市| 静乐县| 山阳县| 黄冈市| 门源|