diff --git a/db/src/main/java/net/zhira/varioutil/sql/AbstractProvider.java b/db/src/main/java/net/zhira/varioutil/sql/AbstractProvider.java index 8843c44..156e72e 100644 --- a/db/src/main/java/net/zhira/varioutil/sql/AbstractProvider.java +++ b/db/src/main/java/net/zhira/varioutil/sql/AbstractProvider.java @@ -4,14 +4,19 @@ import java.sql.Connection; import java.sql.SQLException; abstract class AbstractProvider implements ConnectionProvider { - private final Connection connection; + private Connection connection; - AbstractProvider(Connection connection) { - this.connection = connection; - } + abstract Connection establishConnection(); @Override public Connection getConnection() { + try { + if (connection == null || !connection.isValid(1)) { + connection = establishConnection(); + } + } catch (SQLException e) { + throw new SqlException(e); + } return connection; } diff --git a/db/src/main/java/net/zhira/varioutil/sql/H2Provider.java b/db/src/main/java/net/zhira/varioutil/sql/H2Provider.java index 2b22bcd..fae6fd7 100644 --- a/db/src/main/java/net/zhira/varioutil/sql/H2Provider.java +++ b/db/src/main/java/net/zhira/varioutil/sql/H2Provider.java @@ -2,8 +2,21 @@ package net.zhira.varioutil.sql; import net.zhira.varioutil.util.SqlUtils; +import java.sql.Connection; + public class H2Provider extends AbstractProvider { + private final String path; + private final String username; + private final String password; + public H2Provider(String path, String username, String password) { - super(SqlUtils.createH2Connection(path, username, password)); + this.path = path; + this.username = username; + this.password = password; + } + + @Override + Connection establishConnection() { + return SqlUtils.createH2Connection(path, username, password); } } diff --git a/db/src/main/java/net/zhira/varioutil/sql/MysqlProvider.java b/db/src/main/java/net/zhira/varioutil/sql/MysqlProvider.java index ad7de21..b5c75d8 100644 --- a/db/src/main/java/net/zhira/varioutil/sql/MysqlProvider.java +++ b/db/src/main/java/net/zhira/varioutil/sql/MysqlProvider.java @@ -2,8 +2,24 @@ package net.zhira.varioutil.sql; import net.zhira.varioutil.util.SqlUtils; +import java.sql.Connection; + public class MysqlProvider extends AbstractProvider { + private final String address; + private final String dbname; + private final String username; + private final String password; + private final boolean ssl; + public MysqlProvider(String address, String dbname, String username, String password, boolean ssl) { - super(SqlUtils.createMysqlConnection(address, dbname, username, password, ssl)); + this.address = address; + this.dbname = dbname; + this.username = username; + this.password = password; + this.ssl = ssl; + } + + Connection establishConnection() { + return SqlUtils.createMysqlConnection(address, dbname, username, password, ssl); } } diff --git a/db/src/main/java/net/zhira/varioutil/sql/SqlAdapter.java b/db/src/main/java/net/zhira/varioutil/sql/SqlAdapter.java index f4b20e9..c76f69e 100644 --- a/db/src/main/java/net/zhira/varioutil/sql/SqlAdapter.java +++ b/db/src/main/java/net/zhira/varioutil/sql/SqlAdapter.java @@ -86,5 +86,4 @@ public final class SqlAdapter implements AutoCloseable { } provider = ConnectionProvider.CLOSED; } - } diff --git a/db/src/main/java/net/zhira/varioutil/sql/SqliteProvider.java b/db/src/main/java/net/zhira/varioutil/sql/SqliteProvider.java index 94f5841..9f5c80f 100644 --- a/db/src/main/java/net/zhira/varioutil/sql/SqliteProvider.java +++ b/db/src/main/java/net/zhira/varioutil/sql/SqliteProvider.java @@ -2,8 +2,17 @@ package net.zhira.varioutil.sql; import net.zhira.varioutil.util.SqlUtils; +import java.sql.Connection; + public class SqliteProvider extends AbstractProvider { + private final String path; + public SqliteProvider(String path) { - super(SqlUtils.createSqliteConnection(path)); + this.path = path; + } + + @Override + Connection establishConnection() { + return SqlUtils.createSqliteConnection(path); } }