2016-04-18 21 views
1

mysqlのsetBanned文に問題があります。私は、データベースに禁止されているユーザを設定しようとしていますが、接続が閉じられた後、「操作が許可されていません。誰でも助けてくれますか?MySQL Javaの挿入

はsetBannedコードで

statement.setString(3, reason); 

にエラーをスローします。

現在setBannedコード:

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コード:

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のクラス

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

されている別の接続が 追加取得する必要がありますか? URLはどこですか? – bmarkham

+0

@bmarkhamそれはカスタムクラスです。 –

答えて

0

ご質問は明確ではありません....

MySqlというクラスはありません。そのカスタムクラスがコードスニペットを提供しています。この行の

MySQLのJDBC接続を使用しての実際の方法

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

私は自分のMySQLクラスを追加しました。 –

+0

そして、私はJDBC接続の使い方を知っています。 –

0

if(isBanned(player) && state == false) {あなたが(isBannedを呼び出している)、その方法は、接続がで

conn.close(); 

ラインに閉鎖され実行した後

したがって、else部分になると、接続はすでに閉じられています。

は、あなたはいつも `接続conn`がnull

 else { 

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