首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将ResultSet的结果存储在列表中

将ResultSet的结果存储在列表中
EN

Stack Overflow用户
提问于 2013-03-09 04:53:01
回答 1查看 1.2K关注 0票数 2

我的目标是将所有与我的MySql数据库的交互集中在一个类中(例如SqlUtils)。我基本上想保持对ResultSet或类似类的访问,即使在连接关闭后也是如此。以下方法不起作用,因为在我的业务方法接收到ResultSet之后,会抛出一个异常,因为底层连接已经关闭。我想强调的是,打开和关闭与数据库的连接必须在getResultSet()中进行。

代码语言:javascript
运行
复制
public ResultSet getResultSet(String sql) {
    try (Connection conn = getConnection();){
        return conn.createStatement().executeQuery(sql);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

我现在想做的事情是这样的:

代码语言:javascript
运行
复制
public List<ResultHolder> getResultSet(String sql) {
    List<ResultHolder> list = new LinkedList<>();
    try (Connection conn = getConnection();
         ResultSet res = conn.createStatement().executeQuery(sql);) {
        while(res.next()) {
            list.add(res.convertToResultHolder());
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return list;
}

有没有我需要的类,我把它表示为ResultHolder

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-09 05:08:50

如果您希望在连接关闭后仍能访问所有结果集数据,那么我建议使用以下方法:

代码语言:javascript
运行
复制
public List<Map<String, Object>> getResultSet(String sql) {
   // this list will hold all the data returned from resultset
   List<Map<String, Object>> rows = new ArrayList<Map<String, Object>>();

   try (Connection conn = getConnection();
        ResultSet rs = conn.createStatement().executeQuery(sql);) {
      while(rs.next()) {
         // this map corresponds to each row of the resultset
         // key: column-name, value: column-value
         Map<String, Object> row = new LinkedHashMap<String, Object>();

         // populate each row using resultset's Meta data
         ResultSetMetaData meta = rs.getMetaData();
         for (int i=1; i<=meta.getColumnCount(); i++)
            row.put(meta.getColumnName(i), rs.getObject(i));
         rows.add(row);
        }
   } catch (Exception e) {
        e.printStackTrace();
   }
   return rows;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15303085

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档