将 ResultSet 变成 2DArray/HashMap/Lists of Lists

Posted

技术标签:

【中文标题】将 ResultSet 变成 2DArray/HashMap/Lists of Lists【英文标题】:Turning a ResultSet into 2DArray/HashMap/Lists of Lists 【发布时间】:2014-06-05 13:10:15 【问题描述】:

我想我已经变成了代码盲。

我目前正在和朋友做一个小项目,我们正在使用 JDBC 从 mysql 数据库中进行选择。

我想要的是,在运行 select 语句后,我会得到某种“二维”列表,其中包含所有数据。

我想我想要像这样返回的东西 - array[columnName][all of the data inside the selected column]


伪代码

        // Count all rows from a column 
        // Count the columns selected

        // Adds the column names to 'array'
        for(int i = 1; i <= columnCount; i++)
            columns.add(resultSetMeta.getColumnName(i));

        // Adds the results of the first column to the 'array'
        // How can I add the results from n columns?
        for(int i = 1; i <= rowCount; i++ ) 
            while (resultSet.next())
                rows.add(resultSet.getString(i));
        

        columnsAndRows.put(columns, rows);

    最适合用于“复制”表的数据类型是 ArrayLists、Arrays 还是 HashMaps?

    ResultSet 转换为二维数据类型的最佳方法是什么?

    在遍历 ResultSet 时,如何移动到下一列?

【问题讨论】:

如果您想在每个列名下包含所有列数据,那么 Map&lt;String, List&lt;Object&gt;&gt; 就可以了。这意味着您只能逐列循环。表格通常逐行工作。所以也许List&lt;Map&lt;String, Object&gt;&gt; 会更合适。对于最有用的解决方案,我会使用Guava Table 【参考方案1】:

您可以将 hashmap 用于键值对,将结果集元数据和值作为结果集值作为键。

HashMap<String, Object> p = new HashMap<String, Object>();
p.put("ResultSetkey1","ResultSetvalue1");
p.put("ResultSetkey2","ResultSetvalue2");

另外我想说使用ResultsetUtils ResultsetUtils

【讨论】:

以上是关于将 ResultSet 变成 2DArray/HashMap/Lists of Lists的主要内容,如果未能解决你的问题,请参考以下文章

不能将 resultSet.setFetchDirection(ResultSet.TYPE_SCROLL_SENSITIVE) 与 spring jdbc DaoSupport 与 Oracle 一

将 SQL ResultSet 视为 Scala 流

将大型 ResultSet 写入文件

Mockito - 模拟ResultSet

将 ResultSet 从 servlet 传递给 JSP

如何将 ResultSet 转换为有用的整数?