Add SqlAdapter#getProvider

This commit is contained in:
Roman Zhuravlev 2024-03-16 03:47:11 +05:00
parent 3d79234fb4
commit 05f221f059

View file

@ -2,7 +2,6 @@ package org.zhdev.varioutil.sql;
import org.zhdev.varioutil.util.CheckedFunction;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
@ -11,6 +10,10 @@ import java.util.Objects;
public final class SqlAdapter implements AutoCloseable {
private ConnectionProvider provider = ConnectionProvider.NOT_ESTABLISHED;
public ConnectionProvider getProvider() {
return provider;
}
public void setProvider(ConnectionProvider provider) {
Objects.requireNonNull(provider, "provider");
this.provider = provider;
@ -40,6 +43,15 @@ public final class SqlAdapter implements AutoCloseable {
}
}
public <T> T prepareStatement(String[] columnNames, CheckedFunction<PreparedStatement, T, SQLException> function, String query, Object... args) throws SqlException {
try (PreparedStatement statement = provider.getConnection().prepareStatement(query, columnNames)) {
applyArgs(statement, args);
return function.apply(statement);
} catch (SQLException e) {
throw new SqlException(e);
}
}
public <T> T executeQuery(CheckedFunction<ResultSet, T, SQLException> function, String query, Object... args) throws SqlException {
return prepareStatement(statement -> {
try (ResultSet set = statement.executeQuery()) {
@ -48,7 +60,21 @@ public final class SqlAdapter implements AutoCloseable {
}, query, args);
}
public <T> T executeQuery(int autoGeneratedKeys, CheckedFunction<ResultSet, T, SQLException> function, String query, Object... args) throws SqlException {
return prepareStatement(autoGeneratedKeys, statement -> {
try (ResultSet set = statement.executeQuery()) {
return function.apply(set);
}
}, query, args);
}
public <T> T executeQuery(String[] columnNames, CheckedFunction<ResultSet, T, SQLException> function, String query, Object... args) throws SqlException {
return prepareStatement(columnNames, statement -> {
try (ResultSet set = statement.executeQuery()) {
return function.apply(set);
}
}, query, args);
}
public boolean isClosed() {
return provider.isClosed();