2014-04-07 327 views
0

我必须动态地执行将来自数据库的查询。查询具有动态字段,需要将其转换为映射为键值对并发送到查看。对于例如 一个查询可能只返回一个字段,而其他字段可能会返回两个以上的多行字段。我必须以这种方式编写代码,以便它可以用于n个字段,并使用spring jdbc将其作为映射返回。将JDBC动态查询映射到对象的映射中

回答

2

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 

     } 

    }