当前位置: 代码迷 >> 综合 >> JdbcTemplate - 查询
  详细解决方案

JdbcTemplate - 查询

热度:20   发布时间:2023-12-08 02:08:41.0
使用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());
}
...


传回的List物件中,包括了从资料库中查询出来的结果,并已封装为User类别的实例。
  相关解决方案