/*
 * Copyright 2004-2012 the Seasar Foundation and the Others.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
 * either express or implied. See the License for the specific language
 * governing permissions and limitations under the License.
 */
package jp.fieldnotes.hatunatu.util.sql;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import jp.fieldnotes.hatunatu.util.exception.SQLRuntimeException;
import jp.fieldnotes.hatunatu.util.log.Logger;

import static jp.fieldnotes.hatunatu.util.misc.AssertionUtil.*;
import static jp.fieldnotes.hatunatu.util.log.Logger.*;


/**
 * {@link Statement}用のユーティリティクラスです。
 * 
 * @author higa
 */
public abstract class StatementUtil {

    private static final Logger logger = Logger.getLogger(StatementUtil.class);

    /**
     * SQLを実行します。
     * 
     * @param statement
     *            {@link Statement}。{@literal null}であってはいけません
     * @param sql
     *            SQL文字列。{@literal null}や空文字列であってはいけません
     * @return 実行した結果
     * @see Statement#execute(String)
     */
    public static boolean execute(final Statement statement, final String sql) {
        assertArgumentNotNull("statement", statement);
        assertArgumentNotEmpty("sql", sql);

        try {
            return statement.execute(sql);
        } catch (final SQLException ex) {
            throw new SQLRuntimeException(ex);
        }
    }

    /**
     * フェッチサイズを設定します。
     * 
     * @param statement
     *            {@link Statement}。{@literal null}であってはいけません
     * @param fetchSize
     *            フェッチサイズ
     * @see Statement#setFetchSize(int)
     */
    public static void setFetchSize(final Statement statement,
            final int fetchSize) {
        assertArgumentNotNull("statement", statement);

        try {
            statement.setFetchSize(fetchSize);
        } catch (final SQLException ex) {
            throw new SQLRuntimeException(ex);
        }
    }

    /**
     * 最大行数を設定します。
     * 
     * @param statement
     *            {@link Statement}。{@literal null}であってはいけません
     * @param maxRows
     *            最大の行数
     * @see Statement#setMaxRows(int)
     */
    public static void setMaxRows(final Statement statement, final int maxRows) {
        assertArgumentNotNull("statement", statement);

        try {
            statement.setMaxRows(maxRows);
        } catch (final SQLException ex) {
            throw new SQLRuntimeException(ex);
        }
    }

    /**
     * クエリタイムアウトを設定します。
     * 
     * @param statement
     *            {@link Statement}。{@literal null}であってはいけません
     * @param queryTimeout
     *            クエリタイムアウト
     * @see Statement#setQueryTimeout(int)
     */
    public static void setQueryTimeout(final Statement statement,
            final int queryTimeout) {
        assertArgumentNotNull("statement", statement);

        try {
            statement.setQueryTimeout(queryTimeout);
        } catch (final SQLException ex) {
            throw new SQLRuntimeException(ex);
        }
    }

    /**
     * {@link Statement}を閉じます。
     * <p>
     * {@link Statement#close()}が例外をスローした場合はログにエラーメッセージを出力します。 例外は再スローされません。
     * </p>
     * 
     * @param statement
     *            {@link Statement}
     * @see Statement#close()
     */
    public static void close(final Statement statement) {
        if (statement == null) {
            return;
        }
        try {
            statement.close();
        } catch (final SQLException e) {
            logger.log(format("EUTL0017", e.getMessage()), e);
        }
    }

    /**
     * 結果セットを返します。
     * 
     * @param statement
     *            {@link Statement}。{@literal null}であってはいけません
     * @return 結果セット
     */
    public static ResultSet getResultSet(final Statement statement) {
        assertArgumentNotNull("statement", statement);

        try {
            return statement.getResultSet();
        } catch (final SQLException ex) {
            throw new SQLRuntimeException(ex);
        }
    }

    /**
     * 更新カウントを返します。
     * 
     * @param statement
     *            {@link Statement}。{@literal null}であってはいけません
     * @return 更新カウント
     */
    public static int getUpdateCount(final Statement statement) {
        assertArgumentNotNull("statement", statement);

        try {
            return statement.getUpdateCount();
        } catch (final SQLException ex) {
            throw new SQLRuntimeException(ex);
        }
    }

}

@@ -665,93 +665,8 @@
 l;%0A%0A
-import java.sql.ResultSet;%0Aimport java.sql.SQLException;%0Aimport java.sql.Statement;%0A%0A
 impo
@@ -775,16 +775,101 @@
 ogger;%0A%0A
+import java.sql.ResultSet;%0Aimport java.sql.SQLException;%0Aimport java.sql.Statement;%0A%0A
 import s
@@ -921,17 +921,38 @@
 ionUtil.
-*
+assertArgumentNotEmpty
 ;%0Aimport
@@ -991,20 +991,48 @@
 til.
-log.Logger.*
+misc.AssertionUtil.assertArgumentNotNull
 ;%0A%0A%0A
@@ -3447,540 +3447,8 @@
  %7D%0A%0A
-    /**%0A     * %7B@link Statement%7D%E3%82%92%E9%96%89%E3%81%98%E3%81%BE%E3%81%99%E3%80%82%0A     * %3Cp%3E%0A     * %7B@link Statement#close()%7D%E3%81%8C%E4%BE%8B%E5%A4%96%E3%82%92%E3%82%B9%E3%83%AD%E3%83%BC%E3%81%97%E3%81%9F%E5%A0%B4%E5%90%88%E3%81%AF%E3%83%AD%E3%82%B0%E3%81%AB%E3%82%A8%E3%83%A9%E3%83%BC%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%97%E3%81%BE%E3%81%99%E3%80%82 %E4%BE%8B%E5%A4%96%E3%81%AF%E5%86%8D%E3%82%B9%E3%83%AD%E3%83%BC%E3%81%95%E3%82%8C%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%0A     * %3C/p%3E%0A     * %0A     * @param statement%0A     *            %7B@link Statement%7D%0A     * @see Statement#close()%0A     */%0A    public static void close(final Statement statement) %7B%0A        if (statement == null) %7B%0A            return;%0A        %7D%0A        try %7B%0A            statement.close();%0A        %7D catch (final SQLException e) %7B%0A            logger.log(format(%22EUTL0017%22, e.getMessage()), e);%0A        %7D%0A    %7D%0A%0A
     

remove StatementUtil#close