列出<object>和SqlRowSet向下转换

时间:2016-05-19 03:43:38

标签: java spring

我对Java中的向下转换有疑问:

@interface OParams : NSObject -(int32_t)getParam1; -(int32_t)getParam2; -(void)setParam1:(int32_t)p; -(void)setParam2:(int32_t)p; @end @interface ECMWrapper : NSObject -(OParams*)getDeviceInfo; @end

上面显示的代码将从数据库中检索记录并将其分配给名为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 代表行的索引(我们将在结果集中包含一行或多行)

1 个答案:

答案 0 :(得分:1)

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

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