JdbcTemplate學習筆記

林堯彬發表於2014-03-17

JdbcTemplate學習筆記

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

Java 程式碼
  1.     
  2. jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");     
  3. jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");  

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

Java 程式碼
  1.     
  2. jdbcTemplate.update("INSERT INTO USER VALUES('"       
  3. + user.getId() + "', '"       
  4. + user.getName() + "', '"       
  5. + user.getSex() + "', '"       
  6. + user.getAge() + "')");       
  7. jdbcTemplate.update("INSERT INTO USER VALUES('"       
  8. + user.getId() + "', '"       
  9. + user.getName() + "', '"       
  10. + user.getSex() + "', '"       
  11. + user.getAge() + "')");  

3、帶引數的更新

Java程式碼
  1.     
  2. jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});         
  3. jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});  
Java程式碼
  1.     
  2. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});         
  3. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});  

4、使用JdbcTemplate進行查詢時,使用queryForXXX()等方法

Java程式碼
  1.     
  2. int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");         
  3. int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER");  
Java程式碼
  1.     
  2. String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class);         
  3. String name = (String) jdbcTemplate.queryForObject("SELECT name FROM USER WHERE user_id = ?", new Object[] {id}, java.lang.String.class);  
Java程式碼
  1.     
  2. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");         
  3. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");  
Java程式碼
  1.     
  2. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");       
  3. Iterator it = rows.iterator();       
  4. while(it.hasNext()) {       
  5. Map userMap = (Map) it.next();       
  6. System.out.print(userMap.get("user_id") + "\t");       
  7. System.out.print(userMap.get("name") + "\t");       
  8. System.out.print(userMap.get("sex") + "\t");       
  9. System.out.println(userMap.get("age") + "\t");       
  10. }       
  11.        
  12. List rows = jdbcTemplate.queryForList("SELECT * FROM USER");       
  13.        
  14. Iterator it = rows.iterator();       
  15. while(it.hasNext()) {       
  16. Map userMap = (Map) it.next();       
  17. System.out.print(userMap.get("user_id") + "\t");       
  18. System.out.print(userMap.get("name") + "\t");       
  19. System.out.print(userMap.get("sex") + "\t");       
  20. System.out.println(userMap.get("age") + "\t"); 
        
        
  21. }  

JdbcTemplate將我們使用的JDBC的流程封裝起來,包括了異常的捕捉、SQL的執行、查詢結果的轉換等等。spring大量使用Template Method模式來封裝固定流程的動作,XXXTemplate等類別都是基於這種方式的實現。

除了大量使用Template Method來封裝一些底層的操作細節,spring也大量使用callback方式類回撥相關類別的方法以提供JDBC相關類別的功能,使傳統的JDBC的使用者也能清楚瞭解spring所提供的相關封裝類別方法的使用。

JDBC的PreparedStatement

Java程式碼
  1.     
  2. final String id = user.getId();         
  3. final String name = user.getName();         
  4. final String sex = user.getSex() + "";         
  5. final int age = user.getAge();       
  6.        
  7. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",       
  8.        
  9. new PreparedStatementSetter() {         
  10. public void setValues(PreparedStatement ps) throws SQLException {         
  11. ps.setString(1, id);       
  12. ps.setString(2, name);       
  13. ps.setString(3, sex);       
  14. ps.setInt(4, age);       
  15. }       
  16. });       
  17.        
  18. final String id = user.getId();       
  19. final String name = user.getName();       
  20. final String sex = user.getSex() + "";       
  21. final int age = user.getAge();       
  22.          
  23. jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)",       
  24.          
  25. new PreparedStatementSetter() {           
  26. public void setValues(PreparedStatement ps) throws SQLException {         
  27. ps.setString(1, id);         
  28. ps.setString(2, name);           
  29. ps.setString(3, sex);         
  30. ps.setInt(4, age);           
  31. }         
  32. });        
Java程式碼
  1.     
  2. final User user = new User();           
  3. jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",         
  4. new Object[] {id},         
  5. new RowCallbackHandler() {         
  6. public void processRow(ResultSet rs) throws SQLException {         
  7. user.setId(rs.getString("user_id"));       
  8. user.setName(rs.getString("name"));       
  9. user.setSex(rs.getString("sex").charAt(0));         
  10. user.setAge(rs.getInt("age"));         
  11. }       
  12. });       
  13.        
  14. final User user = new User();       
  15.          
  16. jdbcTemplate.query("SELECT * FROM USER WHERE user_id = ?",         
  17. new Object[] {id},           
  18. new RowCallbackHandler() {       
  19.        
  20.        
  21. public void processRow(ResultSet rs) throws SQLException {         
  22. user.setId(rs.getString("user_id"));         
  23. user.setName(rs.getString("name"));         
  24. user.setSex(rs.getString("sex").charAt(0));         
  25. user.setAge(rs.getInt("age"));         
  26. }         
  27. });  
Java程式碼
  1.     
  2. class UserRowMapper implements RowMapper {       
  3.        
  4. public Object mapRow(ResultSet rs, int index) throws SQLException {       
  5.        
  6. User user = new User();       
  7. user.setId(rs.getString("user_id"));           
  8. user.setName(rs.getString("name"));         
  9. user.setSex(rs.getString("sex").charAt(0));           
  10. user.setAge(rs.getInt("age"));           
  11. return user;              
  12. }              
  13. }       
  14.          
  15. public List findAllByRowMapperResultReader() {           
  16.        
  17. String sql = "SELECT * FROM USER";       
  18.        
  19. return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));       
  20.        
  21. }       
  22.        
  23. class UserRowMapper implements RowMapper {       
  24.        
  25. public Object mapRow(ResultSet rs, int index) throws SQLException {       
  26. User user = new User();         
  27. user.setId(rs.getString("user_id"));         
  28. user.setName(rs.getString("name"));         
  29. user.setSex(rs.getString("sex").charAt(0));         
  30. user.setAge(rs.getInt("age"));         
  31. return user;         
  32. }         
  33. }       
  34.        
  35. public List findAllByRowMapperResultReader() {           
  36. String sql = "SELECT * FROM USER";         
  37. return jdbcTemplate.query(sql, new RowMapperResultReader(new UserRowMapper()));       
  38. }  

在getUser(id)裡面使用UserRowMapper

Java程式碼
  1.     
  2. public User getUser(final String id) throws DataAccessException {         
  3. String sql = "SELECT * FROM USER WHERE user_id=?";         
  4. final Object[] params = new Object[] { id };         
  5. List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper()));           
  6. return (User) list.get(0);         
  7. }     
  8.        
  9. public User getUser(final String id) throws DataAccessException {       
  10. String sql = "SELECT * FROM USER WHERE user_id=?";           
  11. final Object[] params = new Object[] { id };           
  12. List list = jdbcTemplate.query(sql, params, new RowMapperResultReader(new UserRowMapper()));           
  13. return (User) list.get(0);           
  14. }

網上收集

org.springframework.jdbc.core.PreparedStatementCreator 返回預編譯SQL 不能於Object[]一起用

Java程式碼
  1.     
  2. public PreparedStatement createPreparedStatement(Connection con) throwsSQLException {         
  3. return con.prepareStatement(sql);         
  4. }       
  5.        
  6. public PreparedStatement createPreparedStatement(Connection con) throwsSQLException {         
  7. return con.prepareStatement(sql);         
  8. }  

1.增刪改

org.springframework.jdbc.core.JdbcTemplate 類(必須指定資料來源dataSource)

Java程式碼
  1.     
  2. template.update("insert into web_person values(?,?,?)",Object[]);         
  3. template.update("insert into web_person values(?,?,?)",Object[]);  
        

Java程式碼
  1.     
  2. template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ //匿名內部類 只能訪問外部最終區域性變數         
  3. public void setValues(PreparedStatement ps) throws SQLException {         
  4. ps.setInt(index++,3);         
  5. });       
  6.        
  7. template.update("insert into web_person values(?,?,?)",new PreparedStatementSetter(){ //匿名內部類 只能訪問外部最終區域性變數       
  8.        
  9. public void setValues(PreparedStatement ps) throws SQLException {         
  10. ps.setInt(index++,3);         
  11. });       
  12.        
  13. org.springframework.jdbc.core.PreparedStatementSetter //介面 處理預編譯SQL             
  14. public void setValues(PreparedStatement ps) throws SQLException {         
  15. ps.setInt(index++,3);         
  16. }       
  17.        
  18. public void setValues(PreparedStatement ps) throws SQLException {         
  19. ps.setInt(index++,3);         
  20. }  

2.查詢JdbcTemplate.query(String,[Object[]/PreparedStatementSetter],RowMapper/RowCallbackHandler)

org.springframework.jdbc.core.RowMapper 記錄對映介面 處理結果集

Java程式碼
  1.     
  2. public Object mapRow(ResultSet rs, int arg1) throws SQLException { //int表當前行數         
  3. person.setId(rs.getInt("id"));         
  4. }         
  5. List template.query("select * from web_person where id=?",Object[],RowMapper);         
  6. public Object mapRow(ResultSet rs, int arg1) throws SQLException { //int表當前行數         
  7. person.setId(rs.getInt("id"));         
  8. }         
  9. List template.query("select * from web_person where id=?",Object[],RowMapper);  

org.springframework.jdbc.core.RowCallbackHandler 記錄回撥管理器介面 處理結果集

Java程式碼
    1.     
    2. template.query("select * from web_person where id=?",Object[],new RowCallbackHandler(){         
    3. public void processRow(ResultSet rs) throws SQLException {         
    4. person.setId(rs.getInt("id"));         
    5. });  

轉載於:https://www.cnblogs.com/henuyuxiang/p/6155888.html

相關文章