package me.maker56.survivalgames.database.sql; import java.sql.Connection; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; public class DatabaseThread extends Thread { private DatabaseCore core; private static List<DatabaseTask> tasks = new ArrayList<>(); protected DatabaseThread(DatabaseCore core) { this.core = core; } @Override public void run() { try { core.open(); System.out.println("[SurvivalGames] Successfully connected to database! Using database type " + core.getType() + "!"); } catch(Exception e) { System.err.println("[SurvivalGames] Can't connect to database: " + e.toString()); if(core.getType().equals("MySQL")) { System.out.println("[SurvivalGames] The plugin now use SQLite"); DatabaseManager.open("SQLITE"); } return; } while(DatabaseManager.run) { long sleep = 50; if(!tasks.isEmpty()) { try { Connection con = core.getConnection(); Statement s = con.createStatement(); while(!tasks.isEmpty()) { DatabaseTask task = null; try { task = tasks.get(0); if(task.select) { ResultSet rs = s.executeQuery(task.command); task.response.response(task, rs); rs.close(); } else { s.executeUpdate(task.command); } } catch(SQLException e) { if(task != null) { task.error = e; } System.err.println("[SurvivalGames] Error while executing task" + (task == null ? ": " : " (" + task.command + "|" + task.select + "): ") + e.toString()); sleep += 450; } tasks.remove(task); } s.close(); } catch(SQLException e) { System.err.println("[SurvivalGames] Error while working on tasks: " + e.toString()); sleep += 450; } } try { Thread.sleep(sleep); } catch (InterruptedException e) { e.printStackTrace(); } } core.close(); System.out.println("[SurvivalGames] Disconnected from database!"); } public static void addTask(DatabaseTask task) { tasks.add(task); } }