日期:2014-05-16  浏览次数:20658 次

JdbcTemplate 资料(转)
使用JdbcTemplate的execute()方法执行SQL语句 :
jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))"); 
jdbcTemplate.execute("CREATE TABLE USER (user_id integer, name varchar(100))");

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

jdbcTemplate.update("INSERT INTO USER VALUES('"  
           + user.getId() + "', '"  
           + user.getName() + "', '"  
           + user.getSex() + "', '"  
           + user.getAge() + "')");  

jdbcTemplate.update("INSERT INTO USER VALUES('"
           + user.getId() + "', '"
           + user.getName() + "', '"
           + user.getSex() + "', '"
           + user.getAge() + "')");

3、带参数的更新

jdbcTemplate.update("UPDATE USER SET name = ? WHERE user_id = ?", new Object[] {name, id});  

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()});  

jdbcTemplate.update("INSERT INTO USER VALUES(?, ?, ?, ?)", new Object[] {user.getId(), user.getName(), user.getSex(), user.getAge()});


4、使用JdbcTemplate进行查询时,使用queryForXXX()等方法

int count = jdbcTemplate.queryForInt("SELECT COUNT(*) FROM USER"); 

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); 

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");

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");   
}  

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

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 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() {