SHA256
59 lines
1.9 KiB
Java
59 lines
1.9 KiB
Java
package shine.db.connection;
|
|
|
|
import java.sql.Connection;
|
|
import java.sql.DriverManager;
|
|
import java.sql.SQLException;
|
|
|
|
/**
|
|
* Базовый JDBC provider поверх DriverManager.
|
|
*
|
|
* Не знает ничего про конкретный доменный режим БД:
|
|
* конкретные параметры и post-connect инициализация задаются снаружи.
|
|
*/
|
|
public final class DriverManagerDbProvider implements DbProvider {
|
|
|
|
private final String jdbcUrl;
|
|
private final String user;
|
|
private final String password;
|
|
private final ConnectionInitializer initializer;
|
|
|
|
public DriverManagerDbProvider(String jdbcUrl,
|
|
String user,
|
|
String password,
|
|
ConnectionInitializer initializer) {
|
|
if (jdbcUrl == null || jdbcUrl.isBlank()) {
|
|
throw new IllegalArgumentException("jdbcUrl is blank");
|
|
}
|
|
this.jdbcUrl = jdbcUrl;
|
|
this.user = blankToNull(user);
|
|
this.password = blankToNull(password);
|
|
this.initializer = initializer;
|
|
}
|
|
|
|
@Override
|
|
public Connection getConnection() throws SQLException {
|
|
Connection connection;
|
|
if (user == null) {
|
|
connection = DriverManager.getConnection(jdbcUrl);
|
|
} else {
|
|
connection = DriverManager.getConnection(jdbcUrl, user, password == null ? "" : password);
|
|
}
|
|
|
|
if (initializer != null) {
|
|
initializer.initialize(connection);
|
|
}
|
|
return connection;
|
|
}
|
|
|
|
private static String blankToNull(String value) {
|
|
if (value == null) return null;
|
|
String trimmed = value.trim();
|
|
return trimmed.isEmpty() ? null : trimmed;
|
|
}
|
|
|
|
@FunctionalInterface
|
|
public interface ConnectionInitializer {
|
|
void initialize(Connection connection) throws SQLException;
|
|
}
|
|
}
|