summaryrefslogtreecommitdiff
path: root/src/main/java/com/redstoner/misc/mysql/MysqlHandler.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/redstoner/misc/mysql/MysqlHandler.java')
-rw-r--r--src/main/java/com/redstoner/misc/mysql/MysqlHandler.java115
1 files changed, 115 insertions, 0 deletions
diff --git a/src/main/java/com/redstoner/misc/mysql/MysqlHandler.java b/src/main/java/com/redstoner/misc/mysql/MysqlHandler.java
new file mode 100644
index 0000000..909d276
--- /dev/null
+++ b/src/main/java/com/redstoner/misc/mysql/MysqlHandler.java
@@ -0,0 +1,115 @@
+package com.redstoner.misc.mysql;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.Serializable;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.DriverManager;
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.bukkit.Bukkit;
+import org.bukkit.ChatColor;
+import org.json.simple.parser.ParseException;
+
+import com.redstoner.misc.Main;
+import com.redstoner.misc.mysql.elements.MysqlDatabase;
+
+public class MysqlHandler
+{
+ public static MysqlHandler INSTANCE;
+ private String url, username, password;
+
+ public MysqlHandler(String hostname, int port, String username, String password)
+ {
+ this.url = "jdbc:mysql://" + hostname + ":" + port + "/";
+ this.username = username;
+ this.password = password;
+ }
+
+ public static void init()
+ {
+ Map<Serializable, Serializable> mysqlCredentials = new HashMap<>();
+ File mysqlCredentialsFile = new File(Main.plugin.getDataFolder(), "mysqlCredentials.json");
+ if (mysqlCredentialsFile.exists())
+ {
+ try
+ {
+ mysqlCredentials = JSONManager.loadMap(mysqlCredentialsFile);
+ }
+ catch (IOException | ParseException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ else
+ {
+ Bukkit.getConsoleSender().sendMessage(
+ ChatColor.RED + "MySQL config does not exist, creating an example one, things might (will) break!");
+ mysqlCredentials.put("hostname", "localhost");
+ mysqlCredentials.put("port", "3306");
+ mysqlCredentials.put("username", "your username here");
+ mysqlCredentials.put("password", "your password here");
+ try
+ {
+ JSONManager.saveMap(mysqlCredentialsFile, mysqlCredentials);
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace();
+ }
+ }
+ String hostname = (String) mysqlCredentials.get("hostname");
+ int port = Integer.valueOf((String) mysqlCredentials.get("port"));
+ String username = (String) mysqlCredentials.get("username");
+ String password = (String) mysqlCredentials.get("password");
+ INSTANCE = new MysqlHandler(hostname, port, username, password);
+ }
+
+ private Connection getConnection(String databaseName) throws IllegalStateException
+ {
+ Connection connection = null;
+ try
+ {
+ connection = DriverManager.getConnection(url + databaseName, username, password);
+ }
+ catch (SQLException e)
+ {
+ throw new IllegalStateException("Cannot connect to the database!", e);
+ }
+ return connection;
+ }
+
+ public MysqlDatabase getDatabase(String databaseName)
+ {
+ return new MysqlDatabase(getConnection(databaseName));
+ }
+
+ public List<MysqlDatabase> getDatabases()
+ {
+ try
+ {
+ List<MysqlDatabase> databases = new ArrayList<>();
+ Connection connection = DriverManager.getConnection(url.substring(0, url.length()), username, password);
+ DatabaseMetaData metadata = connection.getMetaData();
+ ResultSet queryResults = metadata.getCatalogs();
+ while (queryResults.next())
+ {
+ String databaseName = queryResults.getString("TABLE_CAT");
+ databases.add(new MysqlDatabase(getConnection(databaseName)));
+ }
+ connection.close();
+ return databases;
+ }
+ catch (SQLException e)
+ {
+ e.printStackTrace();
+ return null;
+ }
+ }
+}