TxQueryRunner类的使用
发布日期:2021-06-29 11:23:55
浏览次数:2
分类:技术文章
本文共 3625 字,大约阅读时间需要 12 分钟。
一、TxQueryRunner简介
TxQueryRunner类是common-dbutils.jar下QueryRunner类的子类,用来简化JDBC操作。TxQueryRunner与其父类相比支持事务,底层使用了JdbcUtils来获取连接。
二、QueryRunner的三个方法
2.1 update()
(1)int update(String sql):执行增、删、改语句,参数sql是要执行的SQL语句;
(2)int update(Stringsql, Object param):执行增、删、改语句,参数sql是要执行的SQL语句,参数param是参数(一个参数);
(3)int update(String sql, Object… params):执行增、删、改语句,参数sql是要执行的SQL语句,参数params是参数(多个参数);
package cn.baldprogrammer.test;import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;import org.junit.Test;import cn.jdbc.TxQueryRunner;public class TxQueryRunnerTest { //QueryRunner的update方法 @Test public void testUpdate() throws SQLException{ String sql="insert into t_person(pid,pname,age,sex) values(?,?,?,?)"; Object[] params={"p_002","bill",23,"男"};//给出sql语句中对应的参数 QueryRunner qr=new TxQueryRunner();//没有给对象提供连接池 qr.update(sql,params);//内部使用jdbcUtils来获取连接 }}
package cn.baldprogrammer.test;import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;import org.junit.Test;import cn.itcast.jdbc.JdbcUtils;import cn.jdbc.TxQueryRunner;public class TxQueryRunnerTest { @Test public void testUpdate2() throws Exception{ try{ JdbcUtils.beginTransaction();//开启事务 //可对数据库进行多次操作 String sql="insert into t_person(pid,pname,age,sex) values(?,?,?,?)"; QueryRunner qr=new TxQueryRunner();//没有给对象提供连接池 Object[] params={"p_003","lisa",56,"女"}; qr.update(sql,params); if(false){ throw new Exception(); } params=new Object[]{"p_004","lusi",18,"女"}; qr.update(sql,params); JdbcUtils.commitTransaction();//提交事务 }catch(Exception e){ try { JdbcUtils.rollbackTransaction();//回滚事务 } catch (SQLException e1) { } throw e; } }}
2.2query()
query(String sql, ResultSetHandler<T> rh, Object… params):执行查询,参数sql为要执行的查询语句模板,rh是结果集处理,用来把结果集映射成你想要的结果,params是sql语句的参数;
package cn.baldprogrammer.test;import java.sql.SQLException;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import org.junit.Test;public class TxQueryRunnerTest { //测试查询方法,JDBC查询的结果是ResultSet,QueryRunner查询的结果是ResultSet映射后的结果 //QueryRunner第一步执行seslect,得到ResultSet,第二步把ResultSet转换成其他结果(JavaBean/Map/Object) @Test //单行结果集映射到JavaBean中 public void testQuery1() throws SQLException{ String sql="select * from t_person where pid=?"; QueryRunner qr=new TxQueryRunner(); Person p=qr.query(sql, new BeanHandler(Person.class),1); System.out.println(p); }}
2.3batch()
package cn.baldprogrammer.test;import java.sql.Connection;import java.sql.PreparedStatement;import org.junit.Test;import com.util.JDBCUtils;/** * 批处理 情况: * 一、多条sql语句的批量处理 适用于 sql语句各不一样,使用Statement命令对象执行 * 二、一条sql语句的批量传参 * 适用于sql语句一样,仅仅是参数不同,使用PreparedStatement命令对象指向 * 相关API * addBatch:添加命令到批处理包 * executeBatch:提交批处理包 * clearBatch:清空批处理包 * * 好处: 减少和数据库服务器连接的次数,减少执行的次数,提高效率 */public class TestConnection09 { //使用批处理 @Test public void test02() throws Exception{ // 1.获取连接 Connection connection = JDBCUtils.getConnection(); // 2.访问数据库 String sql="insert into admin values(1,?,?)"; PreparedStatement statement = connection.prepareStatement(sql); for (int i = 1; i < 50000; i++) { statement.setString(1, "小花" + i); statement.setString(2, "8888"); // 批处理 statement.addBatch();// 将要执行的sql语句添加到批处理包(装篮子的操作) if (i % 1000 == 0) { statement.executeBatch();// 提交批处理的命令们(上楼运篮子的操作) statement.clearBatch();// 清空批处理包(卸篮子的操作) } else if (i > 49000) { statement.executeBatch();// 提交批处理的命令们(上楼运篮子的操作) statement.clearBatch();// 清空批处理包(卸篮子的操作) } } // 3.关闭 JDBCUtils.closeConnection(null, statement, connection); } }
转载地址:https://blog.csdn.net/zxyolo/article/details/108379432 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2024年04月13日 17时02分42秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
知乎:学计算机的女生都怎么样了?
2019-04-29
华为重磅反击,鸿蒙来了!
2019-04-29
常用电子接口大全,遇到不认识的,就翻出来对照辨认!
2019-04-29
芯片IC附近为啥要放0.1uF的电容?
2019-04-29
电赛 | 19年全国一等奖,北航学子回忆录。
2019-04-29
电赛 | 19年全国一等奖,北航学子回忆录(上)
2019-04-29
电赛 | 19年全国一等奖,北航学子回忆录(下)
2019-04-29
突破!台积电1nm芯片,有了新进展。
2019-04-29
一文读懂全系列树莓派!
2019-04-29
自制一个害羞的口罩,见人就闭嘴,戴着可以喝奶茶
2019-04-29
聊聊我是如何编程入门的
2019-04-29
J-Link该如何升级固件?
2019-04-29
从电子垃圾中提炼黄金,可以!!!
2019-04-29
知乎大神深入解析:单片机晶振脚原理是什么?
2019-04-29
电容有17种?看看详细介绍!
2019-04-29
如何准备电赛?19年电赛经验总结!
2019-04-29
蓝牙:为啥叫“蓝”牙,不叫“白”牙?
2019-04-29
干货 | 如何系统学习 C 语言?
2019-04-29
多层PCB内部长啥样? 3D大图解析高端PCB板的设计工艺
2019-04-29
鸿蒙2.0都来了,快搭个环境玩起来吧!
2019-04-29