diff --git a/src/main/java/org/kitteh/sqlbans/SQLBans.java b/src/main/java/org/kitteh/sqlbans/SQLBans.java index 78f160e..1811b97 100644 --- a/src/main/java/org/kitteh/sqlbans/SQLBans.java +++ b/src/main/java/org/kitteh/sqlbans/SQLBans.java @@ -50,8 +50,9 @@ public void onEnable() { final String db = config.getString("database.database"); final String user = config.getString("database.auth.username"); final String pass = config.getString("database.auth.password"); + final String tableName = config.getString("database.tablename"); try { - SQLHandler.start(host, port, user, pass, db); + SQLHandler.start(host, port, user, pass, db, tableName); } catch (final SQLBansException e) { this.getLogger().log(Level.SEVERE, "Failure to load, shutting down", e); this.getServer().getPluginManager().disablePlugin(this); diff --git a/src/main/java/org/kitteh/sqlbans/SQLHandler.java b/src/main/java/org/kitteh/sqlbans/SQLHandler.java index 4ba0f32..84aa3c7 100644 --- a/src/main/java/org/kitteh/sqlbans/SQLHandler.java +++ b/src/main/java/org/kitteh/sqlbans/SQLHandler.java @@ -27,11 +27,12 @@ public class SQLHandler { private static SQLHandler instance = null; private static Object sync = new Object(); + private static String tableName; public static void ban(String user, String reason, String admin) throws SQLBansException { synchronized (SQLHandler.sync) { try { - final PreparedStatement statement = SQLHandler.instance().connection.prepareStatement("INSERT INTO `SQLBans_bans` (`username`, `reason`, `admin`) VALUES (?, ?, ?)"); + final PreparedStatement statement = SQLHandler.instance().connection.prepareStatement("INSERT INTO `" + tableName + "` (`username`, `reason`, `admin`) VALUES (?, ?, ?)"); statement.setString(1, user); statement.setString(2, reason); statement.setString(3, admin); @@ -44,7 +45,7 @@ public static void ban(String user, String reason, String admin) throws SQLBansE public static boolean canJoin(String name) throws SQLBansException, SQLException { synchronized (SQLHandler.sync) { - final PreparedStatement banQuery = SQLHandler.instance().connection.prepareStatement("SELECT `id` FROM `SQLBans_bans` WHERE `username`=? AND `banned`=1"); + final PreparedStatement banQuery = SQLHandler.instance().connection.prepareStatement("SELECT `id` FROM `" + tableName + "` WHERE `username`=? AND `banned`=1"); if (banQuery.executeQuery().first()) { return false; } @@ -52,7 +53,7 @@ public static boolean canJoin(String name) throws SQLBansException, SQLException return true; } - public static void start(String host, int port, String user, String pass, String db) throws SQLBansException { + public static void start(String host, int port, String user, String pass, String db, String table) throws SQLBansException { synchronized (SQLHandler.sync) { if (SQLHandler.instance != null) { throw new SQLBansException("Thread already running! Something has gone terribly wrong!"); @@ -62,14 +63,14 @@ public static void start(String host, int port, String user, String pass, String } catch (final ClassNotFoundException e1) { throw new SQLBansException("What on earth are you doing. This isn't CraftBukkit"); } - SQLHandler.instance = new SQLHandler(host, port, user, pass, db); + SQLHandler.instance = new SQLHandler(host, port, user, pass, db, table); } } public static void unban(String user) throws SQLBansException { synchronized (SQLHandler.sync) { try { - final PreparedStatement statement = SQLHandler.instance().connection.prepareStatement("UPDATE `SQLBans_bans` SET `banned` = 0 WHERE `username` = ?"); + final PreparedStatement statement = SQLHandler.instance().connection.prepareStatement("UPDATE `" + tableName + "` SET `banned` = 0 WHERE `username` = ?"); statement.setString(1, user); statement.executeUpdate(); } catch (final SQLException e) { @@ -91,15 +92,25 @@ public SQLHandler() throws SQLBansException { throw new SQLBansException("Stop right there, criminal scum"); } - private SQLHandler(String host, int port, String user, String pass, String db) throws SQLBansException { + private SQLHandler(String host, int port, String user, String pass, String db, String table) throws SQLBansException { try { this.connection = DriverManager.getConnection("jdbc:mysql://" + host + ":" + port + "/" + db + "?autoReconnect=true&user=" + user + "&password=" + pass); - - final PreparedStatement bansTableExists = this.connection.prepareStatement("SHOW TABLES LIKE \"SQLBans_bans\""); + tableName = table; + final PreparedStatement bansTableExists = this.connection.prepareStatement("SHOW TABLES LIKE \"" + tableName + "\""); final ResultSet bansExists = bansTableExists.executeQuery(); if (!bansExists.first()) { - //TODO - create table - throw new SQLBansException("Needs tables! Execute the creation queries in RunFirst.sql"); + String tableCreation = + "CREATE TABLE IF NOT EXISTS `" + tableName + "` (" + + "`id` int(11) NOT NULL AUTO_INCREMENT," + + "`username` varchar(16) NOT NULL," + + "`reason` tinytext NOT NULL," + + "`admin` varchar(16) NOT NULL," + + "`time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP," + + "`banned` tinyint(1) NOT NULL DEFAULT '1'," + + "PRIMARY KEY (`id`)," + + "KEY `username` (`username`)" + + ") ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;"; + this.connection.createStatement().executeUpdate(tableCreation); } } catch (final SQLException e) { throw new SQLBansException("SQL fail!", e); diff --git a/src/main/resources/config.yml b/src/main/resources/config.yml index bc16464..0eef160 100644 --- a/src/main/resources/config.yml +++ b/src/main/resources/config.yml @@ -7,6 +7,7 @@ database: host: localhost port: 3306 database: sqlbans + tablename: SQLBans_bans auth: username: banana password: guava