2016-04-18 12 views
1

Ich habe ein Problem mit meiner mysql setBanned-Anweisung. Ich versuche, einen Benutzer in die Datenbank gesperrt zu setzen, aber es wirft mir eine "Keine Operation ist nach dem Schließen der Verbindung erlaubt." Kann mir jemand helfen?Einfügen von MySQL Java

Es wirft einen Fehler auf dem

statement.setString(3, reason); 

Im setBanned Code.

Aktuelle setBanned Code:

public boolean setBanned(Player player, boolean state, String reason){ 
    Connection conn = null; 
    PreparedStatement statement = null; 
    String setBanned = "INSERT INTO `test_bans` (UUID, BANNED, REASON) VALUES (?, ?, ?)"; 
    String setUnbanned = "UPDATE `test_bans` SET BANNED= ? WHERE UUID= ?"; 
    try{ 
     conn = MySql.getConnection(); 
     if(isBanned(player) && state == false){ 
      statement = conn.prepareStatement(setUnbanned); 
      statement.setBoolean(1, state); 
      statement.setString(2, player.getUniqueId().toString()); 
      statement.executeUpdate(); 
     } else { 
      statement = conn.prepareStatement(setBanned); 
      statement.setString(1, player.getUniqueId().toString()); 
      statement.setBoolean(2, state); 
      statement.setString(3, reason); 
      statement.executeUpdate(); 
     } 
    } catch (SQLException e){ 
     e.printStackTrace(); 
    } finally { 
     if(statement != null){ 
      try{ 
       statement.close(); 
      } catch (SQLException e){ 
       e.printStackTrace(); 
      } 
     } 
     if(conn != null){ 
      try { 
       conn.close(); 
      } catch (SQLException e){ 
       e.printStackTrace(); 
      } 
     } 
    } 
    return false; 
} 

isBanned Code:

public boolean isBanned(Player player){ 
    Connection conn = null; 
    PreparedStatement statement = null; 
    ResultSet result = null; 
    String query = "SELECT BANNED FROM `test_bans` WHERE UUID= ?"; 
    try{ 
     conn = MySql.getConnection(); 
     statement = conn.prepareStatement(query); 
     statement.setString(1, player.getUniqueId().toString()); 
     result = statement.executeQuery(); 
     return result.next(); 
    } catch (SQLException e){ 
     e.printStackTrace(); 
    } finally { 
     if (result != null){ 
      try{ 
       result.close(); 
      } catch (SQLException e){ 
       e.printStackTrace(); 
      } 
     } 
     if(statement != null){ 
      try{ 
       statement.close(); 
      } catch (SQLException e){ 
       e.printStackTrace(); 
      } 
     } 
     if(conn != null){ 
      try { 
       conn.close(); 
      } catch (SQLException e){ 
       e.printStackTrace(); 
      } 
     } 
    } 
    return false; 
} 

EDIT: MySQL Klasse

public class MySql { 

private static String DATABASE_NAME ="testing_database"; 
private static String DATABASE_IP ="localhost:3306"; 
private static String connection ="jdbc:mysql://"+DATABASE_IP+"/"+DATABASE_NAME; 
private static String username  ="root"; 
private static String password  ="pass"; 

private static Connection conn; 

public static void handleConnection(){ 
    Bukkit.getServer().getLogger().info("Establishing connection to MySQL Database...."); 
    try{ 
     conn = DriverManager.getConnection(connection, username, password); 
     if(!conn.isClosed()){ 
      Bukkit.getServer().getLogger().info("Successfully synced with MySQL!"); 
      return; 
     } 
     return; 
    } 
    catch (SQLException e){ 
     e.printStackTrace(); 
     return; 
    } 
} 

public static void disconnectConnection(){ 
    Bukkit.getServer().getLogger().info("Disconnecting from MySQL Databse...."); 
    try{ 
     conn.close(); 
     if(conn.isClosed()){ 
      Bukkit.getServer().getLogger().info("Successfully Disconnected"); 
     } 
     return; 
    } 
    catch(SQLException e){ 
     e.printStackTrace(); 
     return; 
    } 
} 

public static boolean setupTables(){ 
    try{ 
     System.out.println("Checking Tables"); 
     conn.prepareStatement("CREATE TABLE IF NOT EXISTS test_ranks (UUID VARCHAR(255), RANK VARCHAR(25));").executeUpdate(); 
     conn.prepareStatement("CREATE TABLE IF NOT EXISTS test_bans (UUID VARCHAR(255), BANNED BOOLEAN, REASON TEXT);").executeUpdate(); 
     return true; 
    } 
    catch(SQLException e){ 
     e.printStackTrace(); 
     return false; 
    } 
} 

public static boolean checkConnection(){ 
    try{ 
     if((conn != null) && (!conn.isClosed())){ 
      return true; 
     } 
     return false; 
    } 
    catch(SQLException e){ 
     e.printStackTrace(); 
     return false; 
    } 
} 

public static Connection getConnection(){ 
    try { 
     if(conn.isClosed()){ 
      connectMySQL(); 
      return conn; 
     } 
     if(conn == null){ 
      connectMySQL(); 
      return conn; 
     } 
    } catch (SQLException e){ 
     e.printStackTrace(); 
    } 
    return conn; 
} 

public static void connectMySQL(){ 
    try { 
     conn = DriverManager.getConnection(connection, username, password); 
     return; 
    } catch(SQLException e){ 
     e.printStackTrace(); 
    } 
} 

}

+0

hinzufügen zu bekommen Ist Ihr 'Verbindung conn' immer null? Wo ist die URL? – bmarkham

+0

@bmarkham Es ist eine benutzerdefinierte Klasse. –

Antwort

0

Ihre Frage nicht klar ist ....

Es gibt keine Klasse MySql.Wenn seine benutzerdefinierte Klasse ... ihr Code-Snippet bereitstellen.

tatsächliche Art und Weise Mysql JDBC-Verbindungen zu verwenden

Class.forName("com.mysql.jdbc.Driver"); 
Connection conn = null; 
conn = DriverManager.getConnection("jdbc:mysql://hostname:port/dbname","username", "password"); 

//Create statement 

//Execute statement 
//Iterate over results 
//close statement 
conn.close(); // close connection 
+0

Ich habe meine MySQL-Klasse hinzugefügt. –

+0

Und ich weiß, wie man JDBC Verbindungen benutzt. –

0

in dieser Zeile if(isBanned(player) && state == false) {Sie die isBanned anrufen() und nach diesem Verfahren führt die Verbindung in der Leitung geschlossen ist

conn.close(); 

in Die isBannedMethod()

daher, wenn es um den else-Teil geht, ist die Verbindung bereits geschlossen.

Sie benötigen eine andere Verbindung

 else { 

     **conn = MySql.getConnection();** 
    statement = conn.prepareStatement(setBanned);