cubetiq-sql-core/src/main/java/com/cubetiqs/sql/JdbcDataQueryImpl.java

116 lines
4.2 KiB
Java

package com.cubetiqs.sql;
import com.cubetiqs.mapper.MapperProvider;
import com.cubetiqs.mapper.RowMapperProvider;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.List;
import java.util.Map;
public class JdbcDataQueryImpl implements JdbcDataQuery {
private final IDataManager manager;
public JdbcDataQueryImpl(IDataManager manager) {
this.manager = manager;
}
@Override
public IDataManager getManager() {
return manager;
}
@Override
public IExecuteResult<List<Object>> queryForList(String sql) {
ExecuteResult.ExecuteResultBuilder<List<Object>> builder = ExecuteResult.builder();
try (Statement statement = manager.getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
builder.data(ResultSetUtil.getDataAsList(statement.executeQuery(sql)));
} catch (SQLException ex) {
builder.error(ex);
}
return builder.build();
}
@Override
public IExecuteResult<List<Object>> queryForList(String sql, Object... args) {
ExecuteResult.ExecuteResultBuilder<List<Object>> builder = ExecuteResult.builder();
try (PreparedStatement statement = manager.getConnection().prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
ResultSetUtil.applyParameterized(statement, sql, args);
builder.data(ResultSetUtil.getDataAsList(statement.executeQuery()));
} catch (SQLException ex) {
builder.error(ex);
}
return builder.build();
}
@Override
public IExecuteResult<Object> queryForObject(String sql) {
ExecuteResult.ExecuteResultBuilder<Object> builder = ExecuteResult.builder();
try (Statement statement = manager.getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
builder.data(ResultSetUtil.getDataAsObject(statement.executeQuery(sql)));
} catch (SQLException ex) {
builder.error(ex);
}
return builder.build();
}
@Override
public IExecuteResult<Object> queryForObject(String sql, Object... args) {
ExecuteResult.ExecuteResultBuilder<Object> builder = ExecuteResult.builder();
try (PreparedStatement statement = manager.getConnection().prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
ResultSetUtil.applyParameterized(statement, sql, args);
builder.data(ResultSetUtil.getDataAsObject(statement.executeQuery()));
} catch (SQLException ex) {
builder.error(ex);
}
return builder.build();
}
@Override
public <R> IExecuteResult<R> query(MapperProvider<Map<String, Object>, R> mapper, String sql, Class<R> clazz) {
ExecuteResult.ExecuteResultBuilder<R> builder = ExecuteResult.builder();
try (Statement statement = manager.getConnection().createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
builder.data(ResultSetUtil.getDataAsType(mapper, statement.executeQuery(sql), clazz));
} catch (SQLException ex) {
builder.error(ex);
}
return builder.build();
}
@Override
public <R> IExecuteResult<R> query(MapperProvider<Map<String, Object>, R> mapper, String sql, Class<R> clazz, Object... args) {
ExecuteResult.ExecuteResultBuilder<R> builder = ExecuteResult.builder();
try (PreparedStatement statement = manager.getConnection().prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
ResultSetUtil.applyParameterized(statement, sql, args);
builder.data(ResultSetUtil.getDataAsType(mapper, statement.executeQuery(), clazz));
} catch (SQLException ex) {
builder.error(ex);
}
return builder.build();
}
@Override
public <R> IExecuteResult<R> query(String sql, RowMapperProvider<R> mapper) {
return null;
}
@Override
public <R> IExecuteResult<R> query(String sql, RowMapperProvider<R> mapper, Object... args) {
return null;
}
}