jdbcTemplate使用方法總結

 

1、使用JdbcTemplate的execute()方法執行SQL語句 

[Java] 純文本查看 複製代碼
1
jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");



2、如果是UPDATE或INSERT,可以用update()方法。 

[Java] 純文本查看 複製代碼
1
2
3
4
5
jdbcTemplate.update("INSERT INTO USER VALUES('"
   + user.getId() + "', '"
   + user.getName() + "', '"
   + user.getSex() + "', '"
   + user.getAge() + "')");



3、帶參數的更新 

[Java] 純文本查看 複製代碼
1
2
3
jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id}); 
jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",
new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});



4、使用JdbcTemplate進行查詢時,使用queryForXXX()等方法。查詢單列或者列表。

[Java] 純文本查看 複製代碼
01
02
03
04
05
06
07
08
09
10
11
12
int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");
String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class);
List rows = jdbcTemplate.queryForList("SELECT * FROM USER");
List rows = jdbcTemplate.queryForList("SELECT * FROM USER");
Iterator it = rows.iterator();
while(it.hasNext()) {
    Map userMap = (Map) it.next();
    System.out.print(userMap.get("user_id") + "\t");
    System.out.print(userMap.get("name") + "\t");
    System.out.print(userMap.get("sex") + "\t");
    System.out.println(userMap.get("age") + "\t");
}


 

JdbcTemplate將我們使用的JDBC的流程封裝起來,包括了異常的捕捉、SQL的執行、查詢結果的轉換等等。spring大量使用Template Method模式來封裝固定流程的動作,XXXTemplate等類別都是基於這種方式的實現。
除了大量使用Template Method來封裝一些底層的操作細節,spring也大量使用callback方式類回調相關類別的方法以提供JDBC相關類別的功能,使傳統的JDBC的使用者也能清楚瞭解spring所提供的相關封裝類別方法的使用。

 

JDBC的PreparedStatement
[Java] 純文本查看 複製代碼
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
final String id = user.getId();
final String name = user.getName();
final String sex = user.getSex() + "";
final int age = user.getAge();
jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",
new PreparedStatementSetter() {
 public void setValues(PreparedStatement ps) throws SQLException {
    ps.setString(1, id);
    ps.setString(2, name);         
    ps.setString(3, sex);
    ps.setInt(4, age);
 }
});
final User user = new User();
jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",
new Object[] {id},
new RowCallbackHandler() {
public void processRow(ResultSet rs) throws SQLException {
    user.setId(rs.getString("user_id"));
    user.setName(rs.getString("name"));
    user.setSex(rs.getString("sex").charAt(0));
    user.setAge(rs.getInt("age"));
}
});
// 注意在Spring2.0前後是有區別的,後改爲RowMapperResultSetExtractor
class UserRowMapper implements RowMapper {
    public Object mapRow(ResultSet rs, int index) throws SQLException {
        User user = new User();
  
        user.setId(rs.getString("user_id"));
        user.setName(rs.getString("name"));
        user.setSex(rs.getString("sex").charAt(0));
        user.setAge(rs.getInt("age"));
  
        return user;
    }
}
public List findAllByRowMapperResultReader() {
    String sql = "SELECT * FROM USER";
    return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));
}

 

在getUser(id)裏面使用UserRowMapper
[Java] 純文本查看 複製代碼
1
2
3
4
5
6
public User getUser(final String id) throws DataAccessException {
    String sql = "SELECT * FROM USER WHERE user_id=?";
    final Object[] params = new Object[] { id };
    List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper()));
    return (User) list.get(0);
}

更多免費技術資料可關注:annalin1203

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章