Exemplo n.º 1
0
 /**
  * データベースの更新を実行します。
  *
  * @return 更新した行数
  */
 protected int[] executeInternal() {
   final JdbcContext jdbcContext = jdbcManager.getJdbcContext();
   try {
     PreparedStatement ps = null;
     final int batchSize =
         this.batchSize > 0 ? this.batchSize : jdbcManager.getDialect().getDefaultBatchSize();
     final int size = parameterList.size();
     final int[] updateRows = new int[size];
     int pos = 0;
     for (int i = 0; i < size; ++i) {
       final T parameter = parameterList.get(i);
       prepareParameter(parameter);
       if (ps == null) {
         prepareSql();
         ps = getPreparedStatement(jdbcContext);
       }
       logSql();
       prepareInParams(ps);
       PreparedStatementUtil.addBatch(ps);
       resetParams();
       if (i == size - 1 || (batchSize > 0 && (i + 1) % batchSize == 0)) {
         final int[] rows = PreparedStatementUtil.executeBatch(ps);
         System.arraycopy(rows, 0, updateRows, pos, rows.length);
         pos = i + 1;
       }
     }
     return updateRows;
   } finally {
     if (!jdbcContext.isTransactional()) {
       jdbcContext.destroy();
     }
   }
 }
Exemplo n.º 2
0
 /**
  * 準備されたステートメントを返します。
  *
  * @param jdbcContext JDBCコンテキスト
  * @return 準備されたステートメント
  */
 protected PreparedStatement getPreparedStatement(JdbcContext jdbcContext) {
   PreparedStatement ps = jdbcContext.getPreparedStatement(executedSql);
   if (queryTimeout > 0) {
     StatementUtil.setQueryTimeout(ps, queryTimeout);
   }
   return ps;
 }