JdbcTemplate学习笔记

转自:http://www.javaeye.com/topic/53526 仅供个人学习参考使用

1、使用JdbcTemplate的execute()方法执行SQL语句

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()  +   " ') " );

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()等方法

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 " );   
Iterator it 
=  rows.iterator();   
while (it.hasNext())  {   
    Map userMap 
= (Map) it.next();   
    System.out.print(userMap.get(
"user_id"+ " ");   
    System.out.print(userMap.get(
"name"+ " ");   
    System.out.print(userMap.get(
"sex"+ " ");   
    System.out.println(userMap.get(
"age"+ " ");   
}
 

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

 

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

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

网上收集----------------------------------------------------------------------------------------------------------------------------------------

org.springframework.jdbc.core.PreparedStatementCreator 返回预编译SQL 不能于Object[]一起用

public  PreparedStatement createPreparedStatement(Connection con)  throws  SQLException  {   
 
return con.prepareStatement(sql);   
}

1.增删改
org.springframework.jdbc.core.JdbcTemplate 类(必须指定数据源dataSource)

template.update( " insert into web_person values(?,?,?) " ,Object[]);

或者

template.update( " insert into web_person values(?,?,?) " , new  PreparedStatementSetter() {
 
//匿名内部类 只能访问外部最终局部变量   
 public void setValues(PreparedStatement ps) throws SQLException {   
  ps.setInt(index
++,3);   
}
);
 org.springframework.jdbc.core.PreparedStatementSetter 接口 处理预编译SQL

 

public   void  setValues(PreparedStatement ps)  throws  SQLException  {   
 ps.setInt(index
++,3);   
}
 

2.查询JdbcTemplate.query(String,[Object[]/PreparedStatementSetter],RowMapper/RowCallbackHandler)
org.springframework.jdbc.core.RowMapper 记录映射接口 处理结果集 

public  Object mapRow(ResultSet rs,  int  arg1)  throws  SQLException  {   int表当前行数   
  person.setId(rs.getInt(
"id"));   
}
   
List template.query(
" select * from web_person where id=? " ,Object[],RowMapper);

org.springframework.jdbc.core.RowCallbackHandler 记录回调管理器接口 处理结果集

template.query( " select * from web_person where id=? " ,Object[], new  RowCallbackHandler() {   
 
public void processRow(ResultSet rs) throws SQLException {   
  person.setId(rs.getInt(
"id"));   
}
);

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值