From 2e528918bbe9b1321bf1048da0723ccb3f100b67 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Tue, 9 Nov 2021 10:45:18 +0100 Subject: [PATCH 1/2] Reimplement auto reconnect --- SpigotCore_Main/src/de/steamwar/sql/SQL.java | 33 ++++++++++++-------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/SpigotCore_Main/src/de/steamwar/sql/SQL.java b/SpigotCore_Main/src/de/steamwar/sql/SQL.java index 74e68b9..0cffba5 100644 --- a/SpigotCore_Main/src/de/steamwar/sql/SQL.java +++ b/SpigotCore_Main/src/de/steamwar/sql/SQL.java @@ -19,6 +19,7 @@ package de.steamwar.sql; +import com.mysql.jdbc.exceptions.jdbc4.CommunicationsException; import de.steamwar.core.Core; import org.bukkit.configuration.file.YamlConfiguration; @@ -33,27 +34,27 @@ public class SQL { private SQL(){} private static Connection con; - private static String url; - private static String user; - private static String password; + private static final String URL; + private static final String USER; + private static final String PASSWORD; - static{ + static { File file = new File(Core.getInstance().getDataFolder(), "MySQL.yml"); YamlConfiguration config = YamlConfiguration.loadConfiguration(file); if(!file.exists()) throw new SecurityException("SQL-ConfigFile not found!"); - url = "jdbc:mysql://" + config.getString("HOST") + ":" + config.getString("PORT") + "/" + config.getString("DATABASE"); - user = config.getString("USER"); - password = config.getString("PASSWORD"); + URL = "jdbc:mysql://" + config.getString("HOST") + ":" + config.getString("PORT") + "/" + config.getString("DATABASE"); + USER = config.getString("USER"); + PASSWORD = config.getString("PASSWORD"); connect(); } private static void connect() { try { - con = DriverManager.getConnection(url + "?autoReconnect=true&useServerPrepStmts=true", user, password); + con = DriverManager.getConnection(URL + "?useServerPrepStmts=true", USER, PASSWORD); } catch (SQLException e) { throw new SecurityException("Could not start SQL connection", e); } @@ -95,7 +96,8 @@ public class SQL { return false; } } - + + @Deprecated static void update(String qry, Object... objects) { try { prepare(qry, objects).executeUpdate(); @@ -105,7 +107,8 @@ public class SQL { } } - static ResultSet select(String qry, Object... objects){ + @Deprecated + static ResultSet select(String qry, Object... objects) { try { return prepare(qry, objects).executeQuery(); } catch (SQLException e) { @@ -114,7 +117,8 @@ public class SQL { } } - static Blob blob(){ + @Deprecated + static Blob blob() { try { return con.createBlob(); } catch (SQLException e) { @@ -123,7 +127,8 @@ public class SQL { } } - private static PreparedStatement prepare(String qry, Object... objects) throws SQLException{ + @Deprecated + private static PreparedStatement prepare(String qry, Object... objects) throws SQLException { PreparedStatement st = con.prepareStatement(qry); for(int i = 0; i < objects.length; i++){ st.setObject(i+1, objects[i]); @@ -168,8 +173,10 @@ public class SQL { try { setObjects(objects); return runnable.run(); - } catch (SQLException e) { + } catch (CommunicationsException e) { reset(); + return prepare(runnable, objects); + } catch (SQLException e) { throw new SecurityException("Could not execute SQL statement", e); } } From d3ebbafedaa7f5b96030eac9098d8d072c58b164 Mon Sep 17 00:00:00 2001 From: Lixfel Date: Tue, 9 Nov 2021 10:49:41 +0100 Subject: [PATCH 2/2] Prevent infinite recursion --- SpigotCore_Main/src/de/steamwar/sql/SQL.java | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/SpigotCore_Main/src/de/steamwar/sql/SQL.java b/SpigotCore_Main/src/de/steamwar/sql/SQL.java index 0cffba5..fc8c7a2 100644 --- a/SpigotCore_Main/src/de/steamwar/sql/SQL.java +++ b/SpigotCore_Main/src/de/steamwar/sql/SQL.java @@ -171,11 +171,14 @@ public class SQL { private synchronized T prepare(SQLRunnable runnable, Object... objects) { try { - setObjects(objects); - return runnable.run(); - } catch (CommunicationsException e) { - reset(); - return prepare(runnable, objects); + try { + setObjects(objects); + return runnable.run(); + } catch (CommunicationsException e) { + reset(); + setObjects(objects); + return runnable.run(); + } } catch (SQLException e) { throw new SecurityException("Could not execute SQL statement", e); }