调用另一个方法来获取结果集并正确关闭连接?

时间:2012-04-15 18:52:06

标签: java jdbc try-catch

try{
      String query= "select user_name from user";
      ResultSet rs = queries.performQuery(query);

while(rs.next()){
        System.out.println("User Name :" + rs.getString("user_name"));
      }

在另一个班级我有这样的事情:

public ResultSet performQuery(String query) throws SQLException
    {       
        try 
        {
              connection = DriverManager.getConnection(sqlUrl,sqlUser,sqlPassword);
              stmt = connection.createStatement();
                  rs = stmt.executeQuery(query);
        } 

        catch(SQLException ex) 
        {
        }

        finally{
            close(rs);
            close(stmt);
            close(connection);
        }
        return rs;
    }

现在我得到错误在ResultSet关闭后不允许操作,这显然是因为我正在关闭rs / stmt /连接。

我没有我的代码所以这只是我的头脑,忽略任何语法错误,我希望我的问题仍然很清楚。

所以我的问题是:

如果你想拥有一个方法,例如执行查询,然后在另一个方法中调用它,然后执行rs.next,那么关闭resultset / stmt / connection的适当方法是什么?对我来说,关闭performQuery是有意义的,但这给了我错误。

2 个答案:

答案 0 :(得分:2)

如果您使用ResultSet,则需要连接才能加载更多行。例如,如果你的查询返回1000记录,首先ResultSet将在内存中保留41行,然后当你迭代这个数字时,它将使用Connection来加载另一个记录。在你的情况下,我会使用RowSet {{ 3}}

答案 1 :(得分:1)

ResultSet旨在允许结果流式传输,例如一次一条记录。这就是为什么它不是简单地返回某种Collection而是返回类似于迭代器的东西。事实上,ResultSet可以通过开放的JDBC连接懒惰地一次加载一条记录。

如果您愿意同时将所有结果记录在内存中,那就说了 - 只需在关闭ResultSet之前急切地加载所有记录。