/** * データベースの更新を実行します。 * * @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(); } } }
/** * 準備されたステートメントを返します。 * * @param jdbcContext JDBCコンテキスト * @return 準備されたステートメント */ protected PreparedStatement getPreparedStatement(JdbcContext jdbcContext) { PreparedStatement ps = jdbcContext.getPreparedStatement(executedSql); if (queryTimeout > 0) { StatementUtil.setQueryTimeout(ps, queryTimeout); } return ps; }