我有一个关于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代表行的索引(结果集中将有一个或多个行)

最佳答案

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


首先直接返回SqlRowSet而不是进行列表操作。直接使用getString获取调用者代码中的值。
稍长一点,但所有逻辑将保留在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;
}

07-24 20:48