我有一个关于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;
}