java - List<Object> 和 SqlRowSet 向下转型

标签 java spring

我有一个关于 Java 中向下转型的问题:

List<Object> values = this.reportDao.retrieveRecord(ACCEPTABLE_DIFF_SQL, diff);

上面显示的代码将从数据库中检索记录并将其分配给名为 values 的列表

方法retrieveRecord()将循环 SqlRowSet像这样:

public List<Object> retrieveRecord(String sql, Object[] inputs) {
    List<Object> list = new ArrayList<Object>();
    SqlRowSet rset;
    if (inputs.length == 0) {
        rset = getJdbcTemplate().queryForRowSet(sql);
    } else {
        rset = getJdbcTemplate().queryForRowSet(sql, inputs);
    }

    int colCount = rset.getMetaData().getColumnCount();
    if (rset.next()) {
        for (int i = 1; i <= colCount; i++) {
            list.add(rset.getObject(i));
        }
    }
    return list;
}

我的问题是:

如果我想获取存储在 values 中的每个行集中的每一列,我可以有这样的陈述吗:

SqlRowSet srs = (SqlRowSet) values.get(i);
String str = srs.getString(0); // get first column in the row set.
String str1 = srs.getString(1); // get second column in the row set

这里i代表行的索引(结果集中会有一行或多行)

最佳答案

有多种方法可以做到这一点,但我会选择其中两种。

  1. 首先直接返回SqlRowSet,而不是进行列表操作。直接使用 getString 获取调用者代码中的值。

  2. 稍微长一点,但所有逻辑都保留在 DAO 本身中:

    代码示例:

    public  Map<Integer, Map<String, Object>> retrieveRecord(String sql, Object[] inputs) {
    
    Map<Integer, Map<String, Object>> mapOfResults = new HashMap<Integer, Map<String, Object>>();
    
     SqlRowSet rset;
     if (inputs.length == 0) {
        rset = getJdbcTemplate().queryForRowSet(sql);
     } else {
        rset = getJdbcTemplate().queryForRowSet(sql, inputs);
     }
     int colCount = rset.getMetaData().getColumnCount();
     int rowIndex = 1;
     while (rset.next()) {
    
        Map<String, Object> columnValueMap = new HashMap<String, Object>();
        for (int i = 1; i <= colCount; i++) {
            columnValueMap.put(rset.getMetaData().getColumnLabel(i), rset.getObject(i));
        }
    
        mapOfResults.put(rowIndex, columnValueMap); //now you can access valueMap using index.
        rowIndex++;
     }
        return mapOfResults;
    }
    

关于java - List<Object> 和 SqlRowSet 向下转型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37313600/

相关文章:

java - 从 Tomcat 迁移到 WAS

java - ":.+"中的 `{param:.+}` 是什么意思(java)?

java - Elasticsearch无节点可用异常

java - 如何用 Java 求解 ODE?

spring - 当找到多个匹配的bean时,Spring如何按名称 Autowiring ?

java - 如何以 N 计数为参数选择前 N 条记录

spring - 我如何使用 spring 文档记录 java.util.Map

java - 在 Java 中通过 SSL 的 425 错误 ftp

java - 简化的 Bresenham 线算法 : What does it *exactly* do?

java - 为什么 javadoc 是邪恶的,什么是更好的选择?