我遇到需要在同一语句中执行多个查询的情况。我用Java做得很好,但现在我正在尝试切换到Spring并构建一个更好的应用程序。无论如何,我有这样的事情:
select * from table;select * from table2;
上面的代码是一个示例,我并没有真正查询这样的2个表。我正在使用的第三方应用程序返回多个记录集以进行分面搜索和索引等元数据...无论如何,使用标准Java类我可以执行以下操作:
PreparedStatement ps = connect.prepareStatement(sql).execute();
do {
ResultSet rs = ps.getResultSet();
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
@SuppressWarnings("rawtypes")
ArrayList list = new ArrayList();
while (rs.next()) {
Map row = new LinkedHashMap<String, String>();
for (int i=1; i <=columns; ++i) {
row.put(md.getColumnName(i), rs.getObject(i));
// append to our string builder the unique id for each record found
if(cnt == 1) {
if(md.getColumnName(i).equalsIgnoreCase("id")){
id_list.append(rs.getObject(i) + ",");
}
if(md.getColumnName(i).equalsIgnoreCase("part_number")){
suggest.append(rs.getObject(i) + "|");
}
}
}
list.add(row);
}
result.put(label, list);
} while (ps.getMoreResults());
为了简洁起见,我将其修剪下来,但为视觉效果留下了足够的代码。我能够使用JdbcTemplate.query(sql,rowmapper)运行单个查询,并对结果印象深刻。
如果有人能提供一些指导并告诉我哪些方法有效,我真的很感激。
答案 0 :(得分:0)
使用JDBCTemplates时,我不会使用多结果SQL语句。相反,启动一个事务并多次调用template.query(...)以确切地检索您要查找的内容。通过尝试将所有SQL推送到数据库的单个请求,您获得的收益很少。
@Tranactional
public void retrieveStuff(List<Stuff> stuffList) {
List<StuffResult> results = new ArrayList<StuffResult>(stuffList.size());
for(Stuff stuff : stuffList) {
results.add(jdbcTemplate.queryForObject(sql, getSQLParameters(stuff), StuffResult.class));
}
return results;
}