使用 JdbcTemplate 进行查询时,可以使用 queryForXXX()等方法,例如下面使用 queryForInt()方法 传回 user 表格中的资料笔数:
jdbcTemplate.queryForInt( "SELECT COUNT(*) FROM user");
也可以使用 queryForObject()传回一个查询后的结果物件,例如下例传回一个 String 物件:
String name = (String) jdbcTemplate.queryForObject( "SELECT name FROM USER WHERE id = ?", new Object[] {id},java.lang.String.class);
上面两个例子传回的都是单一笔资料,如果传回多笔资料,则可以使用 queryForList()方法,例如:
List rows = jdbcTemplate.queryForList("SELECT * FROM user WHERE id="+ id.intValue());
传回的 List 中包括的是 Map 物件,每个 Map 物件代表查询结果中的一笔资料,每笔资料包括多 个栏位内容,要取得栏位中的值,要使用栏位名称作为键(Key),例如:
... Iterator it = rows.iterator(); while(it.hasNext()) { Map userMap = (Map) it.next(); } ... System.out.println(userMap.get("id")); System.out.println(userMap.get("name")); System.out.println(userMap.get("age")); ...
您可以实作org.springframework.jdbc.core.RowCallbackHandler介面,在查询到资料之后先作一些 处理再传回,例如修改一下 使用 JdbcTemplate 中UserDAO的find()方法如下:
... public User find(Integer id) { final User user = new User(); jdbcTemplate.query( "SELECT * FROM user WHERE id = ?", new Object[] {id}, new RowCallbackHandler() { public void processRow(ResultSet rs) throws SQLException { user.setId(new Integer(rs.getInt("id"))); user.setName(rs.getString("name")); user.setAge(new Integer(rs.getInt("age"))); } }); } ... return user;
如果一次要取回很多查询结果的物件,则您可以先实作 org.springframework.jdbc.core.RowMapper 介面,例如:
package onlyfun.caterpillar; import java.sql.ResultSet; import java.sql.SQLException; import org.springframework.jdbc.core.RowMapper; public class UserRowMapper implements RowMapper { public Object mapRow(ResultSet rs, int rowNum) throws SQLException { User user = new User(); user.setId(new Integer(rs.getInt("id"))); user.setName(rs.getString("name")); user.setAge(new Integer(rs.getInt("age"))); return user; } }
接 着在查 询时 可以使用 org.springframework.jdbc.core.RowMapperResultReader 这 么设定 ,
RowMapperResultReader 实作了 org.springframework.jdbc.core.ResultReader 介面:
... List users = jdbcTemplate.query("SELECT * FROM user", new RowMapperResultReader(new UserRowMapper())); for(int i = 0; i < users.size(); i++) { User user = (User) list.get(i); System.out.println("\tId:\t" + user.getId()); System.out.println("\tName:\t" + next.getName()); System.out.println("\tAge:\n" + user.getAge()); } ...
包括了从资料库中查询出来的结果,并已封装为 User 类别的实例。