package me.paradoxpixel.themepark.database; import me.paradoxpixel.themepark.ThemeParkPlugin; import me.paradoxpixel.themepark.config.YamlConfig; import org.bukkit.Bukkit; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.util.HashMap; import java.util.Map; public class Database { public Database(YamlConfig config) { if(config == null) { enabled = false; return; } enabled = config.getConfig().getBoolean("mysql.enabled"); String host = config.getConfig().getString("mysql.host"); int port = config.getConfig().getInt("mysql.port"); String database = config.getConfig().getString("mysql.database"); user = config.getConfig().getString("mysql.user"); password = config.getConfig().getString("mysql.password"); url = config.getConfig().getString("mysql.url"); url = url.replace("%host%", host); url = url.replace("%port%", Integer.toString(port)); url = url.replace("%database%", database); } private boolean enabled; private String user, password, url; private Connection connection; private int TaskID; public boolean isEnabled() { return enabled; } public void connect() { try { Class.forName("com.mysql.jdbc.Driver").newInstance(); connection = DriverManager.getConnection(url, user, password); startPool(); } catch(Exception e) { enabled = false; e.printStackTrace(); } } public void disconnect() { if(connection == null) return; try { connection.close(); connection = null; } catch(Exception e) { e.printStackTrace(); } } private boolean connected() { if(connection == null) return false; try { return !connection.isClosed(); } catch(Exception e) { e.printStackTrace(); } return false; } private void startPool() { TaskID = Bukkit.getScheduler().runTaskLater(ThemeParkPlugin.getInstance(), new Runnable() { @Override public void run() { disconnect(); TaskID = 0; } }, 1200L).getTaskId(); } private void stopPool() { if(TaskID == 0) return; Bukkit.getScheduler().cancelTask(TaskID); TaskID = 0; } public boolean execute(String query, HashMap objects) { if(query == null || query.isEmpty()) return false; if(!enabled) return false; if(!connected()) connect(); if(!connected()) return false; stopPool(); try { PreparedStatement statement = connection.prepareStatement(query); if(objects != null) for(Map.Entry entry : objects.entrySet()) statement.setObject(entry.getKey(), entry.getValue()); boolean b = statement.execute(); statement.close(); startPool(); return b; } catch(Exception e) { e.printStackTrace(); } startPool(); return false; } }