Java培训课程之使用QueryRunner类实现更新

使用QueryRunner类实现更新(增、删、改、批处理)

(1)更新

public int update(Connection conn, String sql, Object… params) throws SQLException:用来执行一个更新(插入、更新或删除)操作。

public int update(Connection conn, String sql) throws SQLException:用来执行一个不需要置换参数的更新操作。

(2)插入

public <T> T insert(Connection conn,String sql,ResultSetHandler<T> rsh)throws SQLException:其中 rsh – The handler used to create the result object from the ResultSet of auto-generated keys.  返回值: An object generated by the handler.即自动生成的键值

public <T> T insert(Connection conn,String sql,ResultSetHandler<T> rsh, Object… params) throws SQLException:只支持INSERT

public <T> T insert(String sql,ResultSetHandler<T> rsh)throws SQLException:只支持INSERT

public <T> T insert(String sql,ResultSetHandler<T> rsh,Object… params)throws SQLException:只支持INSERT

(3)批处理

public int[] batch(Connection conn,String sql,Object[][] params)throws SQLException: INSERT, UPDATE, or DELETE语句

public int[] batch(String sql,Object[][] params)throws SQLException: INSERT, UPDATE, or DELETE语句

public <T> T insertBatch(Connection conn,String sql,ResultSetHandler<T> rsh,Object[][] params)throws SQLException:只支持INSERT

public <T> T insertBatch(String sql,ResultSetHandler<T> rsh,Object[][] params)throws SQLException:只支持INSERT

(4)是否需要传递Connection?

A:不需要传递Connection对象:

前提是不考虑事务而且QueryRunner对象创建时指定数据源,这样在QueryRunner的所有增删改查方法中都会从数据源中自己获取连接

B:必须传递Connection对象

如果有事务,必须传递Connection对象,因为同一个事务的多条语句必须在一个Connection连接中完成

         public static void main(String[] args) throws Exception{

                  //1、通过数据库连接池来获取连接

                  DataSource ds = new ComboPooledDataSource(“mypool”);

 

                  //2、传sql,并执行,并接收结果

                  String sql = “insert into t_goods(pname,price,description)values(?,?,?)”;

                  QueryRunner qr = new QueryRunner(ds);

                  int len = qr.update(sql, “电源”,78,”充电必备”);//自己到数据库连接池中拿连接

                  System.out.println(len>0?”添加成功”:”添加失败”);

         }

    public static void main(String[] args)throws Exception{

         //1、通过数据库连接池来获取连接

         DataSource ds = new ComboPooledDataSource(“mypool”);

         QueryRunner qr = new QueryRunner();

 

         //从web页面传过来,有这样的数据

         int uid = 1;

         int[] pids = {5,6,7};

         int[] amount = {1,1,1};

         double[] price = {560,58,68};

 

         String sql1 = “insert into t_order(ordertime,sumprice,uid)values(now(),?,?)”;

         String sql2 = “insert into t_detail(oid,pid,amount)values(?,?,?)”;

         //2、获取连接

         Connection conn =  null;

         try {

             conn = ds.getConnection();

             conn.setAutoCommit(false);//手动提交事务        

 

             double sumprice = 0;

             for(int i=0; i<amount.length; i++){

                  sumprice += amount[i] * price[i];

             }

 

             //返回的是自增的键值

             Object object = qr.insert(conn, sql1, new ScalarHandler(), sumprice,uid);

 

             Object[][] params  = new Object[pids.length][3];

             for(int i=0;i<params.length;i++){

                  for(int j=0; j<params[i].length; j++){

                      params[i][0] = object;//订单编号

                      params[i][1] = pids[i];//产品编号

                      params[i][2] = amount[i];//每一件产品的数量

                  }

             }

             qr.insertBatch(conn, sql2, new ScalarHandler(), params);//如果没有自增的键值,那么返回值是null

 

             //提交事务

             conn.commit();

         } catch (Exception e) {

             //回滚事务

             if(conn!=null){

                  conn.rollback();

             }

         } finally{

             if(conn!=null){

                  //在关闭之前,要设置conn的事务方式为自动提交

                  conn.setAutoCommit(true);

                  //关闭连接

                  DbUtils.closeQuietly(conn);

             }

         }

    }

Java培训

 


上一篇:
下一篇:
关于尚硅谷
教育理念
名师团队
学员心声
资源下载
视频下载
资料下载
工具下载
加入我们
招聘岗位
岗位介绍
招贤纳师
联系我们
全国统一咨询电话:010-56253825
地址:北京市昌平区宏福科技园综合楼6层(北京校区)

深圳市宝安区西部硅谷大厦B座C区一层(深圳校区)

上海市松江区谷阳北路166号大江商厦6层(上海校区)

武汉市东湖高新开发区东湖网谷(武汉校区)