隨筆 - 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 扭曲的鉛筆 閱讀(949) 評論(0)  編輯  收藏 所屬分類: J2EE
          主站蜘蛛池模板: 嘉定区| 错那县| 清水县| 翼城县| 黄大仙区| 白朗县| 武邑县| 明水县| 昭觉县| 西宁市| 彰化市| 克什克腾旗| 永昌县| 崇信县| 枣强县| 卓资县| 宁蒗| 太白县| 洪雅县| 福清市| 蒙城县| 西贡区| 隆安县| 新蔡县| 石林| 广宁县| 怀来县| 白玉县| 得荣县| 驻马店市| 义乌市| 罗江县| 青河县| 健康| 双鸭山市| 仁怀市| 克什克腾旗| 民勤县| 万宁市| 灵山县| 革吉县|