public NativeArray executeBatch(String statement, Object[] arrayParameters) throws SQLException {
		PreparedStatement preparedStatement = null;
		int batchSize = 0;

		for (Object arrayParameter : arrayParameters) {
			if (arrayParameter instanceof NativeArray) {
				int arrayLength = (int) ((NativeArray) arrayParameter).getLength();

				if (batchSize == 0) {
					batchSize = arrayLength;
				} else if (batchSize != arrayLength) {
					throw new IllegalArgumentException(
							Resources.getString("Helper.ILLEGAL_ARRAY_LENGTH") //$NON-NLS-1$
									+ arrayLength);
				}
			} else {
				throw new IllegalArgumentException(Resources.getString("Helper.ILLEGAL_NOT_ARRAY") //$NON-NLS-1$
						+ arrayParameter.getClass().getName());
			}
		}

		NativeArray countArray = script.createArray(batchSize);

		try {
			Template template = getTemplate(statement);
			preparedStatement = connection.prepareStatement(template.getPreparableStatement());

			for (int rowIndex = 0; rowIndex < batchSize; rowIndex++) {
				Object[] parameters = new Object[arrayParameters.length];
				preparedStatement.clearParameters();

				for (int columnIndex = 0; columnIndex < arrayParameters.length; columnIndex++) {
					parameters[columnIndex] = ((NativeArray) arrayParameters[columnIndex]).get(
							rowIndex, script.getScope());
				}

				template.setParameters(preparedStatement, parameters);
				preparedStatement.addBatch();
			}

			int[] counts = preparedStatement.executeBatch();

			for (int rowIndex = 0; rowIndex < counts.length; rowIndex++) {
				countArray.put(rowIndex, countArray, counts[rowIndex]);
			}
		} finally {
			if (preparedStatement != null) {
				try {
					preparedStatement.close();
				} catch (SQLException e) {
					// 何もしない
				}
			}
		}

		return countArray;
	}