0
我必須動態地執行將來自數據庫的查詢。查詢具有動態字段,需要將其轉換爲映射爲鍵值對併發送到查看。對於例如 一個查詢可能只返回一個字段,而其他字段可能會返回兩個以上的多行字段。我必須以這種方式編寫代碼,以便它可以用於n個字段,並使用spring jdbc將其作爲映射返回。將JDBC動態查詢映射到對象的映射中
我必須動態地執行將來自數據庫的查詢。查詢具有動態字段,需要將其轉換爲映射爲鍵值對併發送到查看。對於例如 一個查詢可能只返回一個字段,而其他字段可能會返回兩個以上的多行字段。我必須以這種方式編寫代碼,以便它可以用於n個字段,並使用spring jdbc將其作爲映射返回。將JDBC動態查詢映射到對象的映射中
Spring提供了兩種方法來解決您的問題。
方法1:從JdbcTemplate類使用queryForList方法。這將返回由列名填充的映射列表作爲鍵,並將DB記錄作爲值返回。你必須手動迭代列表。列表中的每個映射對象都表示結果集中的單個行。 例如:
List<Map<String, Object>> result = jdbcTemplate.queryForList(query, new Object[]{123});
Iterator items = result.iterator();
while(items.hasNext()){
Map<String, Object> row = (Map<String, Object>) items.next();
System.out.println(row);
}
方法2:此這麼想的完全符合您的要求,但很少比第一種方式也比較編碼參與更快。你可以使用queryForRowSet方法。
SqlRowSet rowSet = jdbcTemplate.queryForRowSet(query, new Object[]{3576});
int columnCount = rowSet.getMetaData().getColumnCount();
System.out.println(columnCount);
while(rowSet.next()){
for(int id =1 ; id <= columnCount ; id ++){
System.out.println(rowSet.getString(id)) ;
// your custom logic goes here
}
}