
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.ISqlPerformerStrategy;
import com.jpattern.orm.session.IGeneratedKeyReader;
import com.jpattern.orm.session.IPreparedStatementCreator;
import com.jpattern.orm.session.IResultSetReader;
import com.jpattern.orm.session.SqlSelectQuery;
/**
*
* @author Francesco Cina
*
* 02/lug/2011
*
* ISqlExecutor implementation using java.sql.Connection as backend.
*/
public class DataSourceSqlPerformerStrategy implements ISqlPerformerStrategy, 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, IResultSetReader 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, IGeneratedKeyReader 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
© 2015 - 2025 Weber Informatics LLC | Privacy Policy