All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jpattern.orm.datasource.DataSourceSqlPerformerStrategy Maven / Gradle / Ivy

package com.jpattern.orm.datasource;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

import com.jpattern.logger.ILogger;
import com.jpattern.orm.exception.OrmException;
import com.jpattern.orm.logger.OrmLogger;
import com.jpattern.orm.session.SqlPerformerStrategy;
import com.jpattern.orm.session.GeneratedKeyReader;
import com.jpattern.orm.session.PreparedStatementCreator;
import com.jpattern.orm.session.ResultSetReader;
import com.jpattern.orm.session.SqlSelectQuery;

/**
 * 
 * @author Francesco Cina
 *
 * 02/lug/2011
 * 
 * ISqlExecutor implementation using java.sql.Connection as backend.
 */
public class DataSourceSqlPerformerStrategy implements SqlPerformerStrategy, IConnectionCaller {

	private final ILogger logger = OrmLogger.getOrmLogger(getClass());
	private final DataSourceSessionProvider dataSourceSessionProvider;

	public DataSourceSqlPerformerStrategy(DataSourceSessionProvider dataSourceSessionProvider) {
		this.dataSourceSessionProvider = dataSourceSessionProvider;
	}

	@Override
	public void execute(String sql, int timeout) throws OrmException {
		logger.debug("execute", "Method called");
		IPreparedStatement preparedStatement = null;
		IConnection conn = dataSourceSessionProvider.getConnection(false, this);
		try {
			preparedStatement = conn.prepareStatement( sql );
			preparedStatement.setQueryTimeout(timeout);
			preparedStatement.execute();
			conn.commit();
		} catch (Exception e) {
			conn.rollback();
			throw new OrmException(e);
		} finally {
			try {
				if (preparedStatement!=null) {
					preparedStatement.close();
				}
			} catch (SQLException e) {
				throw new OrmException(e);
			} finally {
				conn.close(this);
			}
		}
	}

	@Override
	public  T query(SqlSelectQuery sqlSelectQuery, ResultSetReader rse) throws OrmException {
			logger.debug("query", "Method called");
			ResultSet resultSet = null;
			IPreparedStatement preparedStatement = null;
			IConnection conn = dataSourceSessionProvider.getConnection(true, this);
			try {
				preparedStatement = conn.prepareStatement( sqlSelectQuery.getSql() );
				int i = 0;
				for (Object value : sqlSelectQuery.getArgs()) {
					preparedStatement.setObject(++i, value);
				}
				preparedStatement.setMaxRows(sqlSelectQuery.getMaxRows());
				preparedStatement.setQueryTimeout(sqlSelectQuery.getTimeout());
				resultSet = preparedStatement.executeQuery();
				return rse.read(resultSet);
			} catch (Exception e) {
				throw new OrmException(e);
			} finally {
				try {
					if (resultSet!=null && !resultSet.isClosed()) {
						resultSet.close();
					}
					if (preparedStatement!=null) {
						preparedStatement.close();
					}
				} catch (SQLException e) {
					throw new OrmException(e);
				} finally {
					conn.close(this);
				}				
			}
	}

	@Override
	public int update(String sql, int timeout, Object... args) throws OrmException {
		logger.debug("update", "Method called");
		IConnection conn = dataSourceSessionProvider.getConnection(false, this);
		IPreparedStatement preparedStatement = null;
		try {
			preparedStatement = conn.prepareStatement( sql );
			preparedStatement.setQueryTimeout(timeout);
			int i = 0;
			for (Object value : args ) {
				preparedStatement.setObject(++i, value);
			}
			int result = preparedStatement.executeUpdate();
			conn.commit();
			return result;
		} catch (Exception e) {
			conn.rollback();
			throw new OrmException(e);
		} finally {
			try {
				if (preparedStatement!=null) {
					preparedStatement.close();
				}
			} catch (SQLException e) {
				throw new OrmException(e);
			} finally {
				conn.close(this);
			}
		}
	}

	@Override
	public int update(String sql, int timeout, GeneratedKeyReader generatedKeyExtractor, Object... args) throws OrmException {
		logger.debug("update", "Method called");
		IConnection conn = dataSourceSessionProvider.getConnection(false, this);
		ResultSet generatedKeyResultSet = null;
		IPreparedStatement preparedStatement = null;
		int result = 0;
		try {
			preparedStatement = conn.prepareStatement( sql , generatedKeyExtractor.generatedColumnNames());
			preparedStatement.setQueryTimeout(timeout);
			int i = 0;
			for (Object value : args) {
				preparedStatement.setObject(++i, value);
			}
			result = preparedStatement.executeUpdate();
			generatedKeyResultSet = preparedStatement.getGeneratedKeys();
			generatedKeyExtractor.read(generatedKeyResultSet);
			conn.commit();
			return result;
		} catch (Exception e) {
			conn.rollback();
			throw new OrmException(e);
		} finally {
			try {
				if (preparedStatement!=null) {
					preparedStatement.close();
				}
				if (generatedKeyResultSet!=null && !generatedKeyResultSet.isClosed()) {
					generatedKeyResultSet.close();
				}
			} catch (SQLException e) {
				throw new OrmException(e);
			} finally {
				conn.close(this);
			}
		}
	}

	@Override
	public int[] batchUpdate(List sqls, int timeout) throws OrmException {
		logger.debug("batchUpdate", "Method called");
		IConnection conn = dataSourceSessionProvider.getConnection(false, this);
		IStatement statement = null;
		try {
			statement = conn.createStatement();
			statement.setQueryTimeout(timeout);
			for (String sql : sqls) {
				statement.addBatch(sql);
			}
			int[] result = statement.executeBatch();
			conn.commit();
			return result;
		} catch (Exception e) {
			conn.rollback();
			throw new OrmException(e);
		} finally {
			try {
				if (statement!=null) {
					statement.close();
				}
			} catch (SQLException e) {
				throw new OrmException(e);
			} finally {
				conn.close(this);
			}
		}
	}

	@Override
	public int[] batchUpdate(String sql, List args, int timeout) throws OrmException {
		logger.debug("batchUpdate", "Method called");
		IConnection conn = dataSourceSessionProvider.getConnection(false, this);
		IPreparedStatement preparedStatement = null;
		try {
			preparedStatement = conn.prepareStatement( sql );
			preparedStatement.setQueryTimeout(timeout);
			for (Object[] arg : args) {
				int i = 0;
				for (Object value : arg) {
					preparedStatement.setObject(++i, value);
				}
				preparedStatement.addBatch();
			}
			int[] result = preparedStatement.executeBatch();
			conn.commit();
			return result;
		} catch (Exception e) {
			conn.rollback();
			throw new OrmException(e);
		} finally {
			try {
				if (preparedStatement!=null) {
					preparedStatement.close();
				}
			} catch (SQLException e) {
				throw new OrmException(e);
			} finally {
				conn.close(this);
			}
		}
	}

	@Override
	public int[] batchUpdate(String sql, PreparedStatementCreator psc, int timeout) throws OrmException {
		logger.debug("batchUpdate", "Method called");
		IConnection conn = dataSourceSessionProvider.getConnection(false, this);
		PreparedStatementWrapper preparedStatement = null;
		try {
			preparedStatement = conn.prepareStatement( sql );
			preparedStatement.setQueryTimeout(timeout);
			for (int i=0; i




© 2015 - 2025 Weber Informatics LLC | Privacy Policy