2016-06-22 2 views
0

ここでは、発生する可能性のある理由と、開いている接続のために発生する可能性のある原因のみを調べました。私のコードでは、私は接続を閉じて、新しいものを登録して再オープンします。「結果セットを閉じた後に操作を使用できません」

try{ 

     //Registration of driver, connector 
     String myDriver = "com.mysql.jdbc.Driver"; 
     String myURL = "jdbc:mysql://localhost:3306/maintenance"; 
     Class.forName(myDriver); 
     Connection connection = DriverManager.getConnection(myURL, "admin", ""); 


     //Call MySQL for table names of users 
     String query = "SELECT users FROM goods"; 

     Statement st = connection.createStatement(); 


     ResultSet res = st.executeQuery(query); 

      while (res.next()) { 

       String name = res.getString("users"); 


       if(name.equals(username)){ 
        connection.close(); 
        res.close(); 
          try{ 
         Connection connection2; 
         connection2 = DriverManager.getConnection("jdbc:mysql://localhost:3306/maintenance", "admin", ""); 
         query = "SELECT idkeys FROM goods"; 
         Statement st2; 
         st2 = connection2.createStatement(); 
         ResultSet res2; 
         res2 = st2.executeQuery(query); 
         String myDriver2 = "com.mysql.jdbc.Driver"; 
         Class.forName(myDriver2); 
         connection2 = DriverManager.getConnection("jdbc:mysql://localhost:3306/maintenance", "admin", ""); 
         while (res2.next()) { 

          keyed = res2.getObject("idkeys"); 

          if (keyed.equals(sanitizedPass)){ 
           checked = true; 
           connection2.close(); 
           res2.close(); 

          } 
         } 
        } catch (Exception e2){ 
         System.err.println(e2.getMessage()); 

        } 

       } 

    } 
    //Close connections 
    if (!checked){ 
    res.close(); 
    connection.close(); 
    } 
    } 
    catch(Exception e) 
    { 
     System.err.println(e.getMessage()); 
    } 

    return checked; 

私のコードでは、少なくとも私が知る限り、そのようなことは起こりません。なぜそれはまだ投げられるのだろうか?

+2

'connection.close(上記の照会を参照)。 res.close(); 'これで物事をしますが、外側のループを壊さないので、' while(res.next()) 'にループバックするとエラーになります。エラーを引き起こす正確な行についてはエラーメッセージの行番号を参照してください。これは内部ループの問題と同じである可能性が高いためです。解決方法: 'close()'を手動で呼び出さないでください。代わりにtry-with-resourcesを使用してください。 – Andreas

答えて

0
try { 
    String myURL = "jdbc:mysql://localhost:3306/maintenance"; 
    Class.forName("com.mysql.jdbc.Driver"); 
    Connection connection = DriverManager.getConnection(myURL, "admin", ""); 

    String query = "SELECT users, idkeys FROM goods"; 
    Statement st = connection.createStatement(); 
    ResultSet res = st.executeQuery(query); 

    while (res.next()) { 
     String name = res.getString("users"); 
     if (name.equals(username)) { 
      Object keyed = res.getObject("idkeys"); 
      if (keyed.equals(sanitizedPass)) { 
       checked = true; 
       break; 
      } 
     } 
    } 
    return checked; 
} catch (Exception e) { 
    e.printStackTrace(); // or do some reasonable error logging 
} finally { 
    // close the ResultSet, Statement and Connection here 
} 
  1. あなたは複数の接続を作成する必要はありません。 1つで十分です。
  2. 同じテーブルをクエリしていても、2つの異なるクエリをデータベースに送信しています。代わりに、同じクエリで両方のフィールドを返す)(
関連する問題