From 5aca80609a6a73787fe5bad255c8a53b6443d7f6 Mon Sep 17 00:00:00 2001 From: Craftinators Date: Mon, 27 Feb 2023 12:11:09 -0500 Subject: [PATCH 01/12] feat: make `Data` abstract --- .../hmccosmetics/database/types/Data.java | 26 +++++++------------ 1 file changed, 10 insertions(+), 16 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/Data.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/Data.java index 5c4c2431..9f0f7899 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/Data.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/Data.java @@ -17,27 +17,20 @@ import java.util.HashMap; import java.util.Map; import java.util.UUID; -public class Data { +public abstract class Data { - public void setup() { - // Override - } + public abstract void setup(); - public void save(CosmeticUser user) { - // Override - } + public abstract void save(CosmeticUser user); @Nullable - public CosmeticUser get(UUID uniqueId) { - // Override - return null; - } + public abstract CosmeticUser get(UUID uniqueId); + + public abstract void clear(UUID uniqueId); - public void clear(UUID uniqueId) { - // Override - } // BACKPACK=colorfulbackpack&RRGGBB,HELMET=niftyhat,BALLOON=colorfulballoon,CHESTPLATE=niftychestplate - public String serializeData(@NotNull CosmeticUser user) { + @NotNull + public final String serializeData(@NotNull CosmeticUser user) { String data = ""; if (user.getHidden()) { if (shouldHiddenSave(user.getHiddenReason())) { @@ -57,7 +50,8 @@ public class Data { return data; } - public Map> deserializeData(CosmeticUser user, @NotNull String raw) { + @NotNull + public final Map> deserializeData(CosmeticUser user, @NotNull String raw) { Map> cosmetics = new HashMap<>(); boolean checkPermission = Settings.getForcePermissionJoin(); From 060bcc95e1e0af8ac5bd49228854d94d48a91b37 Mon Sep 17 00:00:00 2001 From: Craftinators Date: Mon, 27 Feb 2023 12:20:26 -0500 Subject: [PATCH 02/12] clean: reorganize `MySQLData` --- .../database/types/MySQLData.java | 48 +++++++++---------- 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java index 6ae60580..c476fca8 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java @@ -7,6 +7,7 @@ import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot; import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import org.bukkit.Bukkit; import org.bukkit.Color; +import org.jetbrains.annotations.NotNull; import java.sql.*; import java.util.Map; @@ -100,11 +101,11 @@ public class MySQLData extends Data { } @Override - public void clear(UUID unqiueId) { + public void clear(UUID uniqueId) { Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { try { PreparedStatement preparedSt = preparedStatement("DELETE FROM COSMETICDATABASE WHERE UUID=?;"); - preparedSt.setString(1, unqiueId.toString()); + preparedSt.setString(1, uniqueId.toString()); preparedSt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); @@ -114,30 +115,25 @@ public class MySQLData extends Data { } private void openConnection() throws SQLException { - if (connection != null && !connection.isClosed()) { - return; + // Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { + // ... + // }); + // connection = DriverManager.getConnection("jdbc:mysql://" + DatabaseSettings.getHost() + ":" + DatabaseSettings.getPort() + "/" + DatabaseSettings.getDatabase(), setupProperties()); + + if (connection != null && !connection.isClosed()) return; + + // Close connection if still active + if (connection != null) { + close(); } - //Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { - //close Connection if still active - if (connection != null) { - close(); - } - - //connect to database host - try { - Class.forName("com.mysql.jdbc.Driver"); - - connection = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database, setupProperties()); - - } catch (SQLException e) { - System.out.println(e.getMessage()); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } - - //}); - //connection = DriverManager.getConnection("jdbc:mysql://" + DatabaseSettings.getHost() + ":" + DatabaseSettings.getPort() + "/" + DatabaseSettings.getDatabase(), setupProperties()); + // Connect to database host + try { + // Class.forName("com.mysql.jdbc.Driver"); + connection = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database, setupProperties()); + } catch (SQLException e) { + System.out.println(e.getMessage()); + } } public void close() { @@ -150,6 +146,7 @@ public class MySQLData extends Data { }); } + @NotNull private Properties setupProperties() { Properties props = new Properties(); props.put("user", user); @@ -168,14 +165,17 @@ public class MySQLData extends Data { public PreparedStatement preparedStatement(String query) { PreparedStatement ps = null; + if (!isConnectionOpen()) { HMCCosmeticsPlugin.getInstance().getLogger().info("Connection is not open"); } + try { ps = connection.prepareStatement(query); } catch (SQLException e) { e.printStackTrace(); } + return ps; } } From fce1ec5042905d716343d62238787001d5df38ba Mon Sep 17 00:00:00 2001 From: Craftinators Date: Mon, 27 Feb 2023 12:23:30 -0500 Subject: [PATCH 03/12] refactor: use try-with-resources --- .../hibiscusmc/hmccosmetics/database/types/MySQLData.java | 3 +-- .../hibiscusmc/hmccosmetics/database/types/SQLiteData.java | 7 +++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java index c476fca8..b663dc5d 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java @@ -56,8 +56,7 @@ public class MySQLData extends Data { @Override public void save(CosmeticUser user) { Runnable run = () -> { - try { - PreparedStatement preparedSt = preparedStatement("REPLACE INTO COSMETICDATABASE(UUID,COSMETICS) VALUES(?,?);"); + try (PreparedStatement preparedSt = preparedStatement("REPLACE INTO COSMETICDATABASE(UUID,COSMETICS) VALUES(?,?);")) { preparedSt.setString(1, user.getUniqueId().toString()); preparedSt.setString(2, serializeData(user)); preparedSt.executeUpdate(); diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java index 63a690e5..38a78abb 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java @@ -94,11 +94,10 @@ public class SQLiteData extends Data { } @Override - public void clear(UUID unqiueId) { + public void clear(UUID uniqueId) { Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { - try { - PreparedStatement preparedSt = preparedStatement("DELETE FROM COSMETICDATABASE WHERE UUID=?;"); - preparedSt.setString(1, unqiueId.toString()); + try (PreparedStatement preparedSt = preparedStatement("DELETE FROM COSMETICDATABASE WHERE UUID=?;")) { + preparedSt.setString(1, uniqueId.toString()); preparedSt.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); From 1622dac67f367335da65808445a8727ddb0f1161 Mon Sep 17 00:00:00 2001 From: Craftinators Date: Mon, 27 Feb 2023 12:26:43 -0500 Subject: [PATCH 04/12] clean: cleanup `openConnection()` --- .../database/types/SQLiteData.java | 22 +++++++------------ 1 file changed, 8 insertions(+), 14 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java index 38a78abb..1c4928c4 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java @@ -107,29 +107,23 @@ public class SQLiteData extends Data { private void openConnection() throws SQLException { - if (connection != null && !connection.isClosed()) { - return; - } - //Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { + // Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { + // ... + // }); + // connection = DriverManager.getConnection("jdbc:mysql://" + DatabaseSettings.getHost() + ":" + DatabaseSettings.getPort() + "/" + DatabaseSettings.getDatabase(), setupProperties()); - //close Connection if still active + if (connection != null && !connection.isClosed()) return; + // Close Connection if still active File dataFolder = new File(HMCCosmeticsPlugin.getInstance().getDataFolder(), "database.db"); - //connect to database host + // Connect to database host try { - Class.forName("org.sqlite.JDBC"); - + // Class.forName("org.sqlite.JDBC"); connection = DriverManager.getConnection("jdbc:sqlite:" + dataFolder); - } catch (SQLException e) { System.out.println(e.getMessage()); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); } - - //}); - //connection = DriverManager.getConnection("jdbc:mysql://" + DatabaseSettings.getHost() + ":" + DatabaseSettings.getPort() + "/" + DatabaseSettings.getDatabase(), setupProperties()); } public PreparedStatement preparedStatement(String query) { From 97da4f7809efef209a02bfca09855fb7522d0151 Mon Sep 17 00:00:00 2001 From: Craftinators Date: Mon, 27 Feb 2023 12:53:51 -0500 Subject: [PATCH 05/12] feat: add `SQLData` class --- .../database/types/MySQLData.java | 56 ++-------------- .../hmccosmetics/database/types/SQLData.java | 65 +++++++++++++++++++ .../database/types/SQLiteData.java | 60 ++--------------- 3 files changed, 73 insertions(+), 108 deletions(-) create mode 100644 common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLData.java diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java index b663dc5d..9b19e507 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java @@ -2,19 +2,14 @@ package com.hibiscusmc.hmccosmetics.database.types; import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin; import com.hibiscusmc.hmccosmetics.config.DatabaseSettings; -import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic; -import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot; -import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import org.bukkit.Bukkit; -import org.bukkit.Color; import org.jetbrains.annotations.NotNull; import java.sql.*; -import java.util.Map; import java.util.Properties; import java.util.UUID; -public class MySQLData extends Data { +public class MySQLData extends SQLData { // Connection Information private String host; @@ -53,51 +48,6 @@ public class MySQLData extends Data { throw new RuntimeException(e); } } - @Override - public void save(CosmeticUser user) { - Runnable run = () -> { - try (PreparedStatement preparedSt = preparedStatement("REPLACE INTO COSMETICDATABASE(UUID,COSMETICS) VALUES(?,?);")) { - preparedSt.setString(1, user.getUniqueId().toString()); - preparedSt.setString(2, serializeData(user)); - preparedSt.executeUpdate(); - } catch (SQLException e) { - throw new RuntimeException(e); - } - }; - if (!HMCCosmeticsPlugin.isDisable()) { - Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), run); - } else { - run.run(); - } - } - - @Override - public CosmeticUser get(UUID uniqueId) { - CosmeticUser user = new CosmeticUser(uniqueId); - - Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { - try { - PreparedStatement preparedStatement = preparedStatement("SELECT * FROM COSMETICDATABASE WHERE UUID = ?;"); - preparedStatement.setString(1, uniqueId.toString()); - ResultSet rs = preparedStatement.executeQuery(); - if (rs.next()) { - String rawData = rs.getString("COSMETICS"); - Map> cosmetics = deserializeData(user, rawData); - for (Map cosmeticColors : cosmetics.values()) { - for (Cosmetic cosmetic : cosmeticColors.keySet()) { - Bukkit.getScheduler().runTask(HMCCosmeticsPlugin.getInstance(), () -> { - // This can not be async. - user.addPlayerCosmetic(cosmetic, cosmeticColors.get(cosmetic)); - }); - } - } - } - } catch (SQLException e) { - e.printStackTrace(); - } - }); - return user; - } @Override public void clear(UUID uniqueId) { @@ -110,7 +60,8 @@ public class MySQLData extends Data { e.printStackTrace(); } }); - // TODO + + // TODO (Something) } private void openConnection() throws SQLException { @@ -162,6 +113,7 @@ public class MySQLData extends Data { } } + @Override public PreparedStatement preparedStatement(String query) { PreparedStatement ps = null; diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLData.java new file mode 100644 index 00000000..78713e9d --- /dev/null +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLData.java @@ -0,0 +1,65 @@ +package com.hibiscusmc.hmccosmetics.database.types; + +import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin; +import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic; +import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot; +import com.hibiscusmc.hmccosmetics.user.CosmeticUser; +import org.bukkit.Bukkit; +import org.bukkit.Color; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.Map; +import java.util.UUID; + +public abstract class SQLData extends Data { + @Override + @SuppressWarnings("Duplicates") // Duplicate is from deprecated InternalData + public CosmeticUser get(UUID uniqueId) { + CosmeticUser user = new CosmeticUser(uniqueId); + + Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { + try (PreparedStatement preparedStatement = preparedStatement("SELECT * FROM COSMETICDATABASE WHERE UUID = ?;")) { + preparedStatement.setString(1, uniqueId.toString()); + ResultSet rs = preparedStatement.executeQuery(); + if (rs.next()) { + String rawData = rs.getString("COSMETICS"); + Map> cosmetics = deserializeData(user, rawData); + for (Map cosmeticColors : cosmetics.values()) { + for (Cosmetic cosmetic : cosmeticColors.keySet()) { + Bukkit.getScheduler().runTask(HMCCosmeticsPlugin.getInstance(), () -> { + // This can not be async. + user.addPlayerCosmetic(cosmetic, cosmeticColors.get(cosmetic)); + }); + } + } + } + } catch (SQLException e) { + e.printStackTrace(); + } + }); + + return user; + } + + @Override + public void save(CosmeticUser user) { + Runnable run = () -> { + try (PreparedStatement preparedSt = preparedStatement("REPLACE INTO COSMETICDATABASE(UUID,COSMETICS) VALUES(?,?);")) { + preparedSt.setString(1, user.getUniqueId().toString()); + preparedSt.setString(2, serializeData(user)); + preparedSt.executeUpdate(); + } catch (SQLException e) { + throw new RuntimeException(e); + } + }; + if (!HMCCosmeticsPlugin.isDisable()) { + Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), run); + } else { + run.run(); + } + } + + public abstract PreparedStatement preparedStatement(String query); +} diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java index 1c4928c4..3446576a 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java @@ -1,21 +1,16 @@ package com.hibiscusmc.hmccosmetics.database.types; import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin; -import com.hibiscusmc.hmccosmetics.cosmetic.Cosmetic; -import com.hibiscusmc.hmccosmetics.cosmetic.CosmeticSlot; -import com.hibiscusmc.hmccosmetics.user.CosmeticUser; import com.hibiscusmc.hmccosmetics.util.MessagesUtil; import org.bukkit.Bukkit; -import org.bukkit.Color; import java.io.File; import java.io.IOException; import java.sql.*; -import java.util.Map; import java.util.UUID; import java.util.logging.Level; -public class SQLiteData extends Data { +public class SQLiteData extends SQLData { private Connection connection; @@ -39,60 +34,11 @@ public class SQLiteData extends Data { "(UUID varchar(36) PRIMARY KEY, " + "COSMETICS MEDIUMTEXT " + ");").execute(); - - } catch (SQLException e) { throw new RuntimeException(e); } } - @Override - public void save(CosmeticUser user) { - Runnable run = () -> { - try { - PreparedStatement preparedSt = preparedStatement("REPLACE INTO COSMETICDATABASE(UUID,COSMETICS) VALUES(?,?);"); - preparedSt.setString(1, user.getUniqueId().toString()); - preparedSt.setString(2, serializeData(user)); - preparedSt.executeUpdate(); - } catch (SQLException e) { - throw new RuntimeException(e); - } - }; - if (!HMCCosmeticsPlugin.isDisable()) { - Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), run); - } else { - run.run(); - } - } - - @Override - public CosmeticUser get(UUID uniqueId) { - CosmeticUser user = new CosmeticUser(uniqueId); - - Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { - try { - PreparedStatement preparedStatement = preparedStatement("SELECT * FROM COSMETICDATABASE WHERE UUID = ?;"); - preparedStatement.setString(1, uniqueId.toString()); - ResultSet rs = preparedStatement.executeQuery(); - if (rs.next()) { - String rawData = rs.getString("COSMETICS"); - Map> cosmetics = deserializeData(user, rawData); - for (Map cosmeticColors : cosmetics.values()) { - for (Cosmetic cosmetic : cosmeticColors.keySet()) { - Bukkit.getScheduler().runTask(HMCCosmeticsPlugin.getInstance(), () -> { - // This can not be async. - user.addPlayerCosmetic(cosmetic, cosmeticColors.get(cosmetic)); - }); - } - } - } - } catch (SQLException e) { - e.printStackTrace(); - } - }); - return user; - } - @Override public void clear(UUID uniqueId) { Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { @@ -105,7 +51,6 @@ public class SQLiteData extends Data { }); } - private void openConnection() throws SQLException { // Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { // ... @@ -126,16 +71,19 @@ public class SQLiteData extends Data { } } + @Override public PreparedStatement preparedStatement(String query) { PreparedStatement ps = null; if (!isConnectionOpen()) { HMCCosmeticsPlugin.getInstance().getLogger().info("Connection is not open"); } + try { ps = connection.prepareStatement(query); } catch (SQLException e) { e.printStackTrace(); } + return ps; } From ef4d53eb85a3ae07e72590615c22544c083f93ad Mon Sep 17 00:00:00 2001 From: Craftinators Date: Mon, 27 Feb 2023 12:57:12 -0500 Subject: [PATCH 06/12] fix: throw error if file isn't created --- .../hibiscusmc/hmccosmetics/database/types/SQLiteData.java | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java index 3446576a..f97cc56a 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java @@ -17,10 +17,12 @@ public class SQLiteData extends SQLData { @Override public void setup() { File dataFolder = new File(HMCCosmeticsPlugin.getInstance().getDataFolder(), "database.db"); + boolean exists = dataFolder.exists(); - if (!dataFolder.exists()){ + if (!exists) { try { - dataFolder.createNewFile(); + boolean created = dataFolder.createNewFile(); + if (!created) throw new IOException("File didn't exist but now does"); } catch (IOException e) { MessagesUtil.sendDebugMessages("File write error. Database will not work properly", Level.SEVERE); } From 475a1e0ef1c97c108c5547b6e0d66f9276f03414 Mon Sep 17 00:00:00 2001 From: Craftinators Date: Mon, 27 Feb 2023 13:06:23 -0500 Subject: [PATCH 07/12] fix: add `Class.forName(...)` back --- .../com/hibiscusmc/hmccosmetics/database/types/MySQLData.java | 4 +++- .../hibiscusmc/hmccosmetics/database/types/SQLiteData.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java index 9b19e507..4abbf48b 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java @@ -79,10 +79,12 @@ public class MySQLData extends SQLData { // Connect to database host try { - // Class.forName("com.mysql.jdbc.Driver"); + Class.forName("com.mysql.jdbc.Driver"); connection = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + database, setupProperties()); } catch (SQLException e) { System.out.println(e.getMessage()); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); } } diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java index f97cc56a..f7801c25 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java @@ -66,10 +66,12 @@ public class SQLiteData extends SQLData { // Connect to database host try { - // Class.forName("org.sqlite.JDBC"); + Class.forName("org.sqlite.JDBC"); connection = DriverManager.getConnection("jdbc:sqlite:" + dataFolder); } catch (SQLException e) { System.out.println(e.getMessage()); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); } } From 2bf52808273047c81e72d2f21063aece723649ba Mon Sep 17 00:00:00 2001 From: Craftinators Date: Mon, 27 Feb 2023 15:29:50 -0500 Subject: [PATCH 08/12] fix: reorder null checks --- .../hmccosmetics/database/types/MySQLData.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java index 4abbf48b..4911257d 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java @@ -52,8 +52,7 @@ public class MySQLData extends SQLData { @Override public void clear(UUID uniqueId) { Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { - try { - PreparedStatement preparedSt = preparedStatement("DELETE FROM COSMETICDATABASE WHERE UUID=?;"); + try (PreparedStatement preparedSt = preparedStatement("DELETE FROM COSMETICDATABASE WHERE UUID=?;")) { preparedSt.setString(1, uniqueId.toString()); preparedSt.executeUpdate(); } catch (SQLException e) { @@ -70,11 +69,13 @@ public class MySQLData extends SQLData { // }); // connection = DriverManager.getConnection("jdbc:mysql://" + DatabaseSettings.getHost() + ":" + DatabaseSettings.getPort() + "/" + DatabaseSettings.getDatabase(), setupProperties()); - if (connection != null && !connection.isClosed()) return; - - // Close connection if still active - if (connection != null) { - close(); + // Connection isn't null AND Connection isn't closed :: return + try { + if (isConnectionOpen()) { + return; + } else close(); // Close connection if still active + } catch (RuntimeException e) { + e.printStackTrace(); // If isConnectionOpen() throws error } // Connect to database host @@ -107,7 +108,7 @@ public class MySQLData extends SQLData { return props; } - private boolean isConnectionOpen() { + private boolean isConnectionOpen() throws RuntimeException { try { return connection != null && !connection.isClosed(); } catch (SQLException e) { From 23c82cc6ed2358e57399ac772290900c1ff7d437 Mon Sep 17 00:00:00 2001 From: Craftinators Date: Mon, 27 Feb 2023 15:34:42 -0500 Subject: [PATCH 09/12] fix: additional null checks --- .../hmccosmetics/database/types/MySQLData.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java index 4911257d..cc41a949 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java @@ -4,6 +4,7 @@ import com.hibiscusmc.hmccosmetics.HMCCosmeticsPlugin; import com.hibiscusmc.hmccosmetics.config.DatabaseSettings; import org.bukkit.Bukkit; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.sql.*; import java.util.Properties; @@ -18,6 +19,7 @@ public class MySQLData extends SQLData { private String password; private int port; + @Nullable private Connection connection; @Override @@ -73,7 +75,7 @@ public class MySQLData extends SQLData { try { if (isConnectionOpen()) { return; - } else close(); // Close connection if still active + } else if (connection != null) close(); // Close connection if still active } catch (RuntimeException e) { e.printStackTrace(); // If isConnectionOpen() throws error } @@ -92,8 +94,9 @@ public class MySQLData extends SQLData { public void close() { Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { try { + if (connection == null) throw new NullPointerException(); connection.close(); - } catch (SQLException e) { + } catch (SQLException | NullPointerException e) { System.out.println(e.getMessage()); } }); @@ -125,8 +128,9 @@ public class MySQLData extends SQLData { } try { + if (connection == null) throw new NullPointerException(); ps = connection.prepareStatement(query); - } catch (SQLException e) { + } catch (SQLException | NullPointerException e) { e.printStackTrace(); } From 8ca1d443759cef356fd9b62c739721781adf5403 Mon Sep 17 00:00:00 2001 From: Craftinators Date: Mon, 27 Feb 2023 15:36:50 -0500 Subject: [PATCH 10/12] clean: add error message --- .../hibiscusmc/hmccosmetics/database/types/MySQLData.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java index cc41a949..9298f931 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java @@ -33,11 +33,12 @@ public class MySQLData extends SQLData { HMCCosmeticsPlugin plugin = HMCCosmeticsPlugin.getInstance(); try { openConnection(); + if (connection == null) throw new NullPointerException("Connection is null"); connection.prepareStatement("CREATE TABLE IF NOT EXISTS `COSMETICDATABASE` " + "(UUID varchar(36) PRIMARY KEY, " + "COSMETICS MEDIUMTEXT " + ");").execute(); - } catch (SQLException e) { + } catch (SQLException | NullPointerException e) { plugin.getLogger().severe(""); plugin.getLogger().severe(""); plugin.getLogger().severe("MySQL DATABASE CAN NOT BE REACHED."); @@ -94,7 +95,7 @@ public class MySQLData extends SQLData { public void close() { Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { try { - if (connection == null) throw new NullPointerException(); + if (connection == null) throw new NullPointerException("Connection is null"); connection.close(); } catch (SQLException | NullPointerException e) { System.out.println(e.getMessage()); @@ -128,7 +129,7 @@ public class MySQLData extends SQLData { } try { - if (connection == null) throw new NullPointerException(); + if (connection == null) throw new NullPointerException("Connection is null"); ps = connection.prepareStatement(query); } catch (SQLException | NullPointerException e) { e.printStackTrace(); From 4b1921b75453951d18f9d1fbbe82e7cd3928ca6d Mon Sep 17 00:00:00 2001 From: Craftinators Date: Mon, 27 Feb 2023 22:55:12 -0500 Subject: [PATCH 11/12] clean: `try-with-resource` to `SuppressWarnings` --- .../hmccosmetics/database/types/MySQLData.java | 3 ++- .../hibiscusmc/hmccosmetics/database/types/SQLData.java | 9 ++++++--- .../hmccosmetics/database/types/SQLiteData.java | 4 +++- 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java index 9298f931..329c6339 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java @@ -55,7 +55,8 @@ public class MySQLData extends SQLData { @Override public void clear(UUID uniqueId) { Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { - try (PreparedStatement preparedSt = preparedStatement("DELETE FROM COSMETICDATABASE WHERE UUID=?;")) { + try { + PreparedStatement preparedSt = preparedStatement("DELETE FROM COSMETICDATABASE WHERE UUID=?;"); preparedSt.setString(1, uniqueId.toString()); preparedSt.executeUpdate(); } catch (SQLException e) { diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLData.java index 78713e9d..2372ca64 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLData.java @@ -15,12 +15,13 @@ import java.util.UUID; public abstract class SQLData extends Data { @Override - @SuppressWarnings("Duplicates") // Duplicate is from deprecated InternalData + @SuppressWarnings({"Duplicates", "resource"}) // Duplicate is from deprecated InternalData public CosmeticUser get(UUID uniqueId) { CosmeticUser user = new CosmeticUser(uniqueId); Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { - try (PreparedStatement preparedStatement = preparedStatement("SELECT * FROM COSMETICDATABASE WHERE UUID = ?;")) { + try { + PreparedStatement preparedStatement = preparedStatement("SELECT * FROM COSMETICDATABASE WHERE UUID = ?;"); preparedStatement.setString(1, uniqueId.toString()); ResultSet rs = preparedStatement.executeQuery(); if (rs.next()) { @@ -44,9 +45,11 @@ public abstract class SQLData extends Data { } @Override + @SuppressWarnings("resource") public void save(CosmeticUser user) { Runnable run = () -> { - try (PreparedStatement preparedSt = preparedStatement("REPLACE INTO COSMETICDATABASE(UUID,COSMETICS) VALUES(?,?);")) { + try { + PreparedStatement preparedSt = preparedStatement("REPLACE INTO COSMETICDATABASE(UUID,COSMETICS) VALUES(?,?);"); preparedSt.setString(1, user.getUniqueId().toString()); preparedSt.setString(2, serializeData(user)); preparedSt.executeUpdate(); diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java index f7801c25..0a606a54 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/SQLiteData.java @@ -42,9 +42,11 @@ public class SQLiteData extends SQLData { } @Override + @SuppressWarnings("resource") public void clear(UUID uniqueId) { Bukkit.getScheduler().runTaskAsynchronously(HMCCosmeticsPlugin.getInstance(), () -> { - try (PreparedStatement preparedSt = preparedStatement("DELETE FROM COSMETICDATABASE WHERE UUID=?;")) { + try { + PreparedStatement preparedSt = preparedStatement("DELETE FROM COSMETICDATABASE WHERE UUID=?;"); preparedSt.setString(1, uniqueId.toString()); preparedSt.executeUpdate(); } catch (SQLException e) { From 2d2d4e6d44df9bd23977d68a0eed6c84be2b431f Mon Sep 17 00:00:00 2001 From: Craftinators Date: Mon, 27 Feb 2023 22:55:33 -0500 Subject: [PATCH 12/12] clean: remove TODO --- .../com/hibiscusmc/hmccosmetics/database/types/MySQLData.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java index 329c6339..de8d6db1 100644 --- a/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java +++ b/common/src/main/java/com/hibiscusmc/hmccosmetics/database/types/MySQLData.java @@ -63,8 +63,6 @@ public class MySQLData extends SQLData { e.printStackTrace(); } }); - - // TODO (Something) } private void openConnection() throws SQLException {