隨筆 - 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
          主站蜘蛛池模板: 和平县| 东乡族自治县| 三门峡市| 甘泉县| 财经| 巍山| 宜宾市| 内丘县| 璧山县| 铜川市| 巴马| 全椒县| 成武县| 岳池县| 雷山县| 雅安市| 年辖:市辖区| 襄垣县| 襄城县| 丰原市| 略阳县| 雷州市| 金溪县| 景谷| 全南县| 彰化县| 澄迈县| 上犹县| 莫力| 唐河县| 河曲县| 全州县| 鄯善县| 岳阳县| 大埔区| 阜宁县| 会昌县| 连江县| 远安县| 石棉县| 江达县|