使用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);
"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());
"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"));
...
}
...
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;
}
...
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;
}
}
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 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類別的實例。