2017-03-02 15 views
0

ResultSetを取得しようとするとこのエラーが発生します。私は長い時間オンラインで見てきましたが、私と同じ問題を抱えている人がたくさんいますが、彼らの問題は複数のクエリに対してPreparedStatementを使用していることです。PreparedStatementが1回だけ使用されても、ResultSetの終了後に操作が許可されない

次のコードでわかるように、私はPreparedStatementを1回だけ使用します。

getSQLConnection()メソッドは、まったく新しいConnectionを返します。 エラーがラインにスローされます()

try (Connection connection = getSQLConnection(); 
      PreparedStatement ps = connection.prepareStatement(qry); 
      ResultSet rs = ps.executeQuery()) { 

     return rs; 

    } catch (SQLException ex) { 
     plugin.get().getLogger().log(Level.SEVERE, "Couldn't execute SQL statement: ", ex); 
    } 

私が使用しているSQLデータベースの前のResultSet rsを= ps.executeQueryをし、それがこれを実行したことはありません。私は混乱しています。あなたたちが私を助けてくれることを願っています!

答えて

2

tryをリソースとして使用したときに、ブロック自体が実行を完了すると、try句内のすべてのリソースを閉じるようJavaに指示しました。これには、書いたとおり、ResultSetが含まれています。これは、あなたのメソッドを呼び出した人は決してその結果セットを使用できないことを意味します。代わりに、tryブロック内の結果セットを処理する必要があります

try (Connection connection = getSQLConnection(); 
     PreparedStatement ps = connection.prepareStatement(qry); 
     ResultSet rs = ps.executeQuery()) { 

    // process result set here 
} 

結果セットは、あなたのJDBCコールのクリーンアップが、今でなければならないという別の問題がある返す、呼び出し側はそれを受け取る時も閉鎖されることに加えて2つの場所で行われます。これは非常に望ましくなく、保守の問題です。

関連する問題