From 65bc1ab49c2d1adcb948fd582283dca8eaf3e3e4 Mon Sep 17 00:00:00 2001 From: Aust1n46 Date: Thu, 26 Mar 2020 14:35:01 -0400 Subject: [PATCH] Fix leaky database connection --- .../Aust1n46/chat/MineverseChat.java | 1 - .../Aust1n46/chat/database/Database.java | 2 -- .../Aust1n46/chat/database/MySQL.java | 35 ++++++------------- .../Aust1n46/chat/database/SQLite.java | 6 ---- 4 files changed, 11 insertions(+), 33 deletions(-) diff --git a/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java b/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java index 37e9636..0599a39 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java +++ b/MineverseChat/mineverse/Aust1n46/chat/MineverseChat.java @@ -291,7 +291,6 @@ public class MineverseChat extends JavaPlugin implements PluginMessageListener { String user = mysqlConfig.getString("user"); String password = mysqlConfig.getString("password"); db = new MySQL(host, port, database, user, password); - db.init(); } commands.put("broadcast", new Broadcast("broadcast")); diff --git a/MineverseChat/mineverse/Aust1n46/chat/database/Database.java b/MineverseChat/mineverse/Aust1n46/chat/database/Database.java index 37b7d0a..63d68e5 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/database/Database.java +++ b/MineverseChat/mineverse/Aust1n46/chat/database/Database.java @@ -15,8 +15,6 @@ public abstract class Database { protected HikariDataSource dataSource = null; - public abstract void init(); - public void writeVentureChat(String time, String uuid, String name, String server, String channel, String text, String type) { MineverseChat plugin = MineverseChat.getInstance(); Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { diff --git a/MineverseChat/mineverse/Aust1n46/chat/database/MySQL.java b/MineverseChat/mineverse/Aust1n46/chat/database/MySQL.java index d778e7c..8ba5a79 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/database/MySQL.java +++ b/MineverseChat/mineverse/Aust1n46/chat/database/MySQL.java @@ -1,31 +1,17 @@ package mineverse.Aust1n46.chat.database; import java.sql.Connection; +import java.sql.PreparedStatement; import java.sql.SQLException; -import java.sql.Statement; import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource; -//This class initializes the plugins connection to the MySQL database if it's enabled. +//This class initializes the plugin's connection to the MySQL database if it's enabled. public class MySQL extends Database { - private final String user; - private final String database; - private final String password; - private final int port; - private final String hostname; - public MySQL(String hostname, int port, String database, String username, String password) { - this.hostname = hostname; - this.port = port; - this.database = database; - this.user = username; - this.password = password; - } - - @Override - public void init() { - HikariConfig config = new HikariConfig(); + public MySQL(String hostname, int port, String database, String user, String password) { + final HikariConfig config = new HikariConfig(); //config.setDriverClassName(org.postgresql.Driver.class.getName()); //final String jdbcUrl = String.format("jdbc:postgresql://%s:%d/%s", hostname, port, database); final String jdbcUrl = String.format("jdbc:mysql://%s:%d/%s", hostname, port, database); @@ -36,13 +22,14 @@ public class MySQL extends Database { config.addDataSourceProperty("prepStmtCacheSize", "250"); config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048"); dataSource = new HikariDataSource(config); - try { - Connection conn = dataSource.getConnection(); - Statement statement = conn.createStatement(); - statement.executeUpdate("CREATE TABLE IF NOT EXISTS VentureChat " + + final String SQL_CREATE_TABLE = "CREATE TABLE IF NOT EXISTS VentureChat " + "(ID SERIAL PRIMARY KEY, ChatTime TEXT, UUID TEXT, Name TEXT, " + - "Server TEXT, Channel TEXT, Text TEXT, Type TEXT)"); - } catch (SQLException e) { + "Server TEXT, Channel TEXT, Text TEXT, Type TEXT)"; + try (final Connection conn = dataSource.getConnection(); + final PreparedStatement statement = conn.prepareStatement(SQL_CREATE_TABLE)) { + statement.executeUpdate(); + } + catch (SQLException e) { throw new RuntimeException(e); } } diff --git a/MineverseChat/mineverse/Aust1n46/chat/database/SQLite.java b/MineverseChat/mineverse/Aust1n46/chat/database/SQLite.java index 447fcdb..75f17ed 100644 --- a/MineverseChat/mineverse/Aust1n46/chat/database/SQLite.java +++ b/MineverseChat/mineverse/Aust1n46/chat/database/SQLite.java @@ -10,14 +10,8 @@ import mineverse.Aust1n46.chat.MineverseChat; //This class initializes the connection to a SQLite database, which has no implementations currently in the plugin. public class SQLite extends Database { - private final String dbLocation; public SQLite(String dbLocation) { - this.dbLocation = dbLocation; - } - - @Override - public void init() { File dataFolder = MineverseChat.getInstance().getDataFolder(); if (!dataFolder.exists()) dataFolder.mkdirs(); File databaseFile = new File(dataFolder, dbLocation);