/** * データベースの更新を実行します。 * * @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(); } } }