mysql - 将 ResultSet 的结果存储在列表中

标签 mysql java-7

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

public ResultSet getResultSet(String sql) {
    try (Connection conn = getConnection();){
        return conn.createStatement().executeQuery(sql);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

我现在想做的是这样的:

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

最佳答案

如果您希望即使在连接关闭后也能访问所有结果集数据,那么我建议您执行以下操作:

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;
}

关于mysql - 将 ResultSet 的结果存储在列表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15303085/

相关文章:

java - 如果您尝试使用 Java 7 构建 GAE/Java 项目,会发生什么情况?

eclipse - Java 7 中的 emma 和 junit 导致 java.lang.VerifyError 和非法局部变量错误

mysql - 选择查询 Rails 中的值元组

mysql - Sql选择数据Mysql报错

MySQL - 在相似的时间戳上分组

Java EE 安装程序在 Mac OS X Mavericks 上崩溃

java - @InjectMocks 在 Java 6 和 7 中表现不同

MySql:动态添加列,与另一个表中的行一样多

php - MySQL 在同一列中按 ASC 和 DESC 排序

java - 编译器错误 : reference to call ambiguous