From 855ce84f7a7972346eff74b9ef8520c7bce2b43d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Pani=C4=87?= Date: Mon, 29 Apr 2019 23:50:49 +0200 Subject: Implemented better MySQL connection handling (NEEDS TESTING!) --- .../com/redstoner/misc/mysql/MysqlHandler.java | 6 ++-- .../misc/mysql/elements/MysqlDatabase.java | 34 +++++++++++++++------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/src/main/java/com/redstoner/misc/mysql/MysqlHandler.java b/src/main/java/com/redstoner/misc/mysql/MysqlHandler.java index d76227a..78364d9 100644 --- a/src/main/java/com/redstoner/misc/mysql/MysqlHandler.java +++ b/src/main/java/com/redstoner/misc/mysql/MysqlHandler.java @@ -55,10 +55,10 @@ public class MysqlHandler { } public MysqlDatabase getDatabase(String databaseName) { - return new MysqlDatabase(getConnection(databaseName)); + return new MysqlDatabase(this, databaseName); } - private Connection getConnection(String databaseName) throws IllegalStateException { + public Connection getConnection(String databaseName) throws IllegalStateException { Connection connection = null; try { connection = DriverManager.getConnection(url + databaseName, username, password); @@ -76,7 +76,7 @@ public class MysqlHandler { ResultSet queryResults = metadata.getCatalogs(); while (queryResults.next()) { String databaseName = queryResults.getString("TABLE_CAT"); - databases.add(new MysqlDatabase(getConnection(databaseName))); + databases.add(new MysqlDatabase(this, databaseName)); } connection.close(); return databases; diff --git a/src/main/java/com/redstoner/misc/mysql/elements/MysqlDatabase.java b/src/main/java/com/redstoner/misc/mysql/elements/MysqlDatabase.java index 3f1c288..c9236c3 100644 --- a/src/main/java/com/redstoner/misc/mysql/elements/MysqlDatabase.java +++ b/src/main/java/com/redstoner/misc/mysql/elements/MysqlDatabase.java @@ -1,5 +1,6 @@ package com.redstoner.misc.mysql.elements; +import com.redstoner.misc.mysql.MysqlHandler; import com.redstoner.misc.mysql.MysqlQueryHandler; import java.sql.Connection; @@ -10,10 +11,14 @@ import java.util.ArrayList; import java.util.List; public class MysqlDatabase { - private Connection connection; + private Connection connection = null; - public MysqlDatabase(Connection connection) { - this.connection = connection; + private final MysqlHandler handler; + private final String databaseName; + + public MysqlDatabase(MysqlHandler handler, String databaseName) { + this.handler = handler; + this.databaseName = databaseName; } public MysqlTable getTable(String name) { @@ -21,7 +26,7 @@ public class MysqlDatabase { } public boolean createTable(String name, MysqlField... description) { - return MysqlQueryHandler.queryNoResult(connection, "CREATE TABLE `" + name + "` " + getDescription(description) + ";"); + return MysqlQueryHandler.queryNoResult(getConnection(), "CREATE TABLE `" + name + "` " + getDescription(description) + ";"); } private String getDescription(MysqlField... description) { @@ -47,20 +52,20 @@ public class MysqlDatabase { } public boolean createTableIfNotExists(String name, MysqlField... description) { - return MysqlQueryHandler.queryNoResult(connection, "CREATE TABLE IF NOT EXISTS `" + name + "` " + getDescription(description) + ";"); + return MysqlQueryHandler.queryNoResult(getConnection(), "CREATE TABLE IF NOT EXISTS `" + name + "` " + getDescription(description) + ";"); } public boolean dropTable(String name) { - return MysqlQueryHandler.queryNoResult(connection, "DROP TABLE `" + name + "`;"); + return MysqlQueryHandler.queryNoResult(getConnection(), "DROP TABLE `" + name + "`;"); } public boolean drop() { - return MysqlQueryHandler.queryNoResult(connection, "DROP DATABASE `" + getName() + "`;"); + return MysqlQueryHandler.queryNoResult(getConnection(), "DROP DATABASE `" + getName() + "`;"); } public String getName() { try { - return connection.getCatalog(); + return getConnection().getCatalog(); } catch (SQLException e) { e.printStackTrace(); return null; @@ -70,7 +75,7 @@ public class MysqlDatabase { public List getTables() { try { List tables = new ArrayList<>(); - DatabaseMetaData metadata = connection.getMetaData(); + DatabaseMetaData metadata = getConnection().getMetaData(); ResultSet queryResults = metadata.getTables(null, null, "%", null); while (queryResults.next()) { @@ -84,7 +89,16 @@ public class MysqlDatabase { } } - protected Connection getConnection() { + Connection getConnection() { + try { + if (connection == null || connection.isClosed()) { + connection = handler.getConnection(databaseName); + } + } catch (SQLException e) { + e.printStackTrace(); + connection = handler.getConnection(databaseName); + } + return connection; } } -- cgit v1.2.3