/*
* Copyright 2004-2015 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 org.seasar.extension.jdbc.impl;
import java.sql.Connection;
import java.sql.PreparedStatement;
import javax.sql.DataSource;
import org.seasar.extension.jdbc.StatementFactory;
import org.seasar.extension.jdbc.UpdateHandler;
import org.seasar.extension.jdbc.util.ConnectionUtil;
import org.seasar.framework.exception.SQLRuntimeException;
import org.seasar.framework.util.PreparedStatementUtil;
import org.seasar.framework.util.StatementUtil;
/**
* {@link UpdateHandler}の基本的な実装クラスです。
*
* @author higa
*
*/
public class BasicUpdateHandler extends BasicHandler implements UpdateHandler {
/**
* {@link BasicUpdateHandler}を作成します。
*/
public BasicUpdateHandler() {
}
/**
* {@link BasicUpdateHandler}を作成します。
*
* @param dataSource
* データソース
* @param sql
* SQL
*/
public BasicUpdateHandler(DataSource dataSource, String sql) {
super(dataSource, sql);
}
/**
* {@link BasicUpdateHandler}を作成します。
*
* @param dataSource
* データソース
* @param sql
* SQL
* @param statementFactory
* ステートメントファクトリ
*/
public BasicUpdateHandler(DataSource dataSource, String sql,
StatementFactory statementFactory) {
super(dataSource, sql, statementFactory);
}
public int execute(Object[] args) throws SQLRuntimeException {
return execute(args, getArgTypes(args));
}
public int execute(Object[] args, Class[] argTypes)
throws SQLRuntimeException {
Connection connection = getConnection();
try {
return execute(connection, args, argTypes);
} finally {
ConnectionUtil.close(connection);
}
}
/**
* SQL文を実行します。
*
* @param connection
* コネクション
* @param args
* 引数
* @param argTypes
* 引数の型
* @return 更新した行数
*/
public int execute(Connection connection, Object[] args, Class[] argTypes) {
logSql(args, argTypes);
PreparedStatement ps = prepareStatement(connection);
try {
bindArgs(ps, args, argTypes);
return PreparedStatementUtil.executeUpdate(ps);
} finally {
StatementUtil.close(ps);
}
}
}