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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:JdbcUtils工具类的使用
下一篇:Java生成随机32长字符串:实现MySQL表主键ID、激活码不重复

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月13日 17时02分42秒