2017-11-17 7 views
0

データベースからフィールドを持つ新しいオブジェクトを作成するメソッドを実行しようとしていますが、毎回このコードを実行しています。SQLException:ResultSetがクローズしました。ここでは、ひかりを使用してSQLException:ResultSetが閉じた

public DatabasedClient getDatabaseClient(int clientDatabaseid){ 
    if(DatabaseClientUtil.isInDatabase(clientDatabaseid)){ 
     return DatabaseClientUtil.getDBClient(clientDatabaseid); 
    }else{ 
     try{ 
      System.out.println("Trying to find user in db"); 
      ResultSet rs = fbot.getStorage().query("select * from database_name where clientDBId = " + clientDatabaseid); 
      System.out.println("deb " + rs.getString("nick")); 
      while (rs.next()) { 
       DatabasedClient databasedClient = new DatabasedClient(clientDatabaseid); 
       databasedClient.setUid(rs.getString("uid")); 
       databasedClient.setNick(rs.getString("nick")); 
       databasedClient.setLastConnect(rs.getLong("lastConnected")); 
       databasedClient.setLastDisconnect(rs.getLong("lastDisconnect")); 
       databasedClient.setTimeSpent(rs.getLong("timeSpent")); 
       databasedClient.setLongestConnection(rs.getLong("longestConnection")); 
       return databasedClient; 
      } 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 
    return null; 
} 

}

イムAbstractStorageクラスのメソッドは、私は誰かがこれで私を助けることを願っエラー enter image description here

から

@Override 
public void execute(String query) throws SQLException { 
    try (Connection connection = getConnection()){ 
     connection.prepareStatement(query).executeUpdate(); 
    } 
} 

@Override 
public ResultSet query(String query) throws SQLException { 
    try (Connection connection = getConnection()) { 
     return connection.prepareStatement(query).executeQuery(); 
    } 
} 

スクリーンショットです。

+0

をあなたは 'while'ループ内で' return'文を持っている...出力は – alfasin

+0

何ですか? – johnII

答えて

2

私はあなたが見ている正確なエラーが次のコード行によって引き起こされていると思う:

System.out.println("deb " + rs.getString("nick")); 

あなたが最初のレコードにカーソルを進める前に、結果セットにアクセスしようとしています。また、getDatabaseClientメソッドは、概念的にクエリーから単一の予想されるレコードにマップする単一のオブジェクトを返します。したがって、結果セットを一度反復することは理にかなっているようです。考慮このすべてを取ると、私たちは次のことを試すことができます。

try { 
    System.out.println("Trying to find user in db"); 
    ResultSet rs = fbot.getStorage().query("select * from database_name where clientDBId = " + clientDatabaseid); 
    // do not access the result set here 

    if (rs.next()) { 
     DatabasedClient databasedClient = new DatabasedClient(clientDatabaseid); 
     databasedClient.setUid(rs.getString("uid")); 
     databasedClient.setNick(rs.getString("nick")); 
     databasedClient.setLastConnect(rs.getLong("lastConnected"));    
     databasedClient.setLastDisconnect(rs.getLong("lastDisconnect")); 
     databasedClient.setTimeSpent(rs.getLong("timeSpent")); 
     databasedClient.setLongestConnection(rs.getLong("longestConnection")); 
     return databasedClient; 
    } 
} catch (SQLException e) { 
    e.printStackTrace(); 
} 
+0

今、その大丈夫ですが、エラーはありませんが.. データベースからclientDBId 4028を取得しようとしていますが、ユーザーがデータベースに存在していても、このメソッドはnullを返します。 – xdev

+0

私はあなたのAPIを知らない私はここでもっと助けになることはありません。 –

関連する問題