Spring使用JdbcTemplate插入和修改数据的三种方法

                                                      

 Spring JDBC的主要目标是为了简化JDBC的编程,方便我们构建健壮的应用程序。这里,它的一个基本设计理念,就是将JDBC编程中变化的和不变化的分开。先看一段普通建立数据库连接的方式:

Java 代码:

  1. public List getAvailableSeatlds(DataSource ds, int performanceld,  
  2.        int seatType) throws ApplicationException {  
  3.      String sql = "SELECT seat_id AS id FROM available_seats " +  
  4.                   "WHERE performance_id = ? AND price_band_id = ?";                     
  5.      List seatlds = new LinkedList();  
  6.      Connection con = null;  
  7.      PreparedStatement ps = null;  
  8.      ResultSet rs = null;  
  9.      try {  
  10.        con = ds.getConnection();   //1。建立Connection
  11.        ps = con.prepareStatement(sql);  //2。创建preparedStatement
  12.        ps.setlnt(1, performanceld);  //3。设置ps的参数
  13.        ps.setlnt(2, seatType);  
  14.        rs = ps.executeQuery();      //4.执行查询
  15.        while (rs.next()) {         //5.解析ResultSet
  16.          int seatld = rs.getlnt(1);  
  17.          seatlds.add(new Integer(seatld));  
  18.        }                                                                                
  19.        rs.close();                //6.关闭资源,做好善后工作。rs,ps,connection
  20.        ps.close();  
  21.      }  
  22.      catch (SQLException ex) {  
  23.        throw new ApplicationException ("Couldn't run query [" + sql + "]", ex);  
  24.      }  
  25.      finally {  
  26.        try {  
  27.          if (con != null)  
  28.            con.close();  //如果没有连接池的话,不要轻易关。connection属于耗费资源:)
  29.        }  
  30.        catch (SQLException ex) {  
  31.          // Log and ignore  
  32.        }  
  33.      }  
  34.      return seatlds;  
  35.    }  

      从上面看,什么是不变的。首先,咱们这个使用JDBC的方式是良好的,正确的,也是不变的,也就是workflow不变。其次,这里头的很多操作是不变的,比如说:关闭资源,处理异常。
     什么是变的?设置PreparedStament的参数是变化的,利用PreparedStatement做什么是变化的。
     还有什么是变的?取得Connection可能是变化的,我们可以从ConnectionPool中取,也可以裸从Database取。
     还有什么是变的?在主工作流之外,还可以对PreparedStament设置一些属性。比如fetchSize等。
     还有什么是变的?解析ResultSet是变的。但是可以抽象,都是从结果集中取得你想要的东西。

 

下面是使用JdbcTemplate的三种方式:

1.重载PreparedStatementCreator方法

 重点在于从写它的createPreparedStatement方法,方法内部一般功能JDBC书写标准的。

  public int add(final Groupinfo g){
  final String sql = "insert into groupinfo values(?,?,?,?,?,?,?,?)";
  
  return jdbcTemplate.update(new PreparedStatementCreator() {
   
   @Override
   public PreparedStatement createPreparedStatement(Connection con)
     throws SQLException {
    PreparedStatement ps=con.prepareStatement(sql);
    ps.setString(1, null);
    ps.setString(2, g.getGname());
    ps.setString(3, g.getDeptName());
    ps.setString(4, g.getGuser());
    ps.setString(5, g.getGtel());
    ps.setString(6, g.getGfax());
    ps.setString(7, g.getGaddress());
    ps.setString(8, g.getGpostCode());
    return ps;
   }
  });
   
 }

2.重载PreparedStatementSeter方法

重点在于重写setValues方法,参数是个PreparedStatement实例。
public int add(final Groupinfo g){   final String sql = "insert into groupinfo values(?,?,?,?,?,?,?,?)";      return jdbcTemplate.update(sql, new PreparedStatementSetter() {        @Override    public void setValues(PreparedStatement ps) throws SQLException {     ps.setString(1, null);     ps.setString(2, g.getGname());     ps.setString(3, g.getDeptName());     ps.setString(4, g.getGuser());     ps.setString(5, g.getGtel());     ps.setString(6, g.getGfax());     ps.setString(7, g.getGaddress());     ps.setString(8, g.getGpostCode());         }   });
 }

3.直接使用SQL语句


  
  
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值