博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java操作数据库增删改查的小工具1--TxQueryRunner
阅读量:4634 次
发布时间:2019-06-09

本文共 5211 字,大约阅读时间需要 17 分钟。

在java程序中,一般使用jdbc连接数据库,比较麻烦,在看传智教程时学了一个工具类,用于简化与数据库之间的操作步骤,就是TxQueryRunner,他是QueryRunner的子类,用起来和他是一样的,特点是支持事务,使用时需要导入几个jar包,分别是

:

这个工具类的优点基本上就是阿帕奇出的DBUtils框架里边所具有的特点,极大简化操作者的代码量,底层使用c3p0连接池,可以方便的吧数据库查询出来的结果映射到JavaBean,List,Map等中,以下是笔记及代码:

import java.sql.SQLException;import java.util.List;import java.util.Map;import org.apache.commons.dbutils.QueryRunner;import org.apache.commons.dbutils.handlers.BeanHandler;import org.apache.commons.dbutils.handlers.BeanListHandler;import org.apache.commons.dbutils.handlers.MapHandler;import org.apache.commons.dbutils.handlers.MapListHandler;import org.apache.commons.dbutils.handlers.ScalarHandler;import org.junit.Test;import cn.itcast.commons.CommonUtils;import cn.itcast.jdbc.JdbcUtils;import cn.itcast.jdbc.TxQueryRunner;/** * TxQueryRunner它是QueryRunner的子类!(commons-dbutils.jar) *   可用起来与QueryRunner相似的! *   我们的类支持事务!它底层使用了JdbcUtils来获取连接! *    * 简化jdbc的操作 * QueryRunner的三个方法: * * update() --> insert、update、delete * * query() --> select * * batch() --> 批处理 * @author qdmmy6 * */public class TxQueryRunnerTest {    /**     * 测试update()方法,用来执行insert、update、delete语句     * @throws SQLException     */    @Test    public void testUpdate() throws SQLException {        String sql = "insert into t_person(pid,pname,age,sex) values(?,?,?,?)";        Object[] params = {"1", "p1", 1, "男"};//给sql中对应的参数                QueryRunner qr = new TxQueryRunner();//我们没有给对象提供连接池        qr.update(sql, params);//执行sql,也不提供连接,它内部会使用JdbcUtils来获取连接    }        /**     * 使用事务     * @throws SQLException     */    @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 = {"2", "p2", 2, "女"};            qr.update(sql, params);//执行                        if(false) {                throw new Exception();            }                        params = new Object[]{"3", "p3", 3, "女"};            qr.update(sql, params);//执行                                    JdbcUtils.commitTransaction();//提交事务        } catch(Exception e) {            try {                JdbcUtils.rollbackTransaction();//回滚事务            } catch (SQLException e1) {            }            throw e;        }            }        /**     * 测试查询方法     *   我们知道JDBC查询的结果的是ResultSet     *   而QueryRunner查询的结果是通过ResultSet映射后的数据。     *     * QueryRunner第一步是执行select,得到ResultSet     *     * 把ResultSet转换成其他类型的!     *   通过转换结果:     *      * javaBean:把结果集封装到javaBean中     *      * Map:把结果集封装到Map中     *      * 把结果集封装到Object中(结果集是单行单列)     * @throws SQLException      *           *       */    /*     * 单行结果集映射到javaBean中     */    @Test    public void testQuery1() throws SQLException {        String sql = "select * from t_person where pid=?";        QueryRunner qr = new TxQueryRunner();        /*         * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。         *          * BeanHandler --> 它是ResultSetHandler的实现类,它的作用是把结果集封装到Person对象中         */        Person p = qr.query(sql, new BeanHandler
(Person.class), "1"); System.out.println(p); } /** * 使用BeanListHandler * 把多行结果集映射到List
,即多个JavaBean对象。 * 一行结果集记录对应一个javaBean对象,多行就对应List
* @throws SQLException */ @Test public void testQuery2() throws SQLException { String sql = "select * from t_person"; QueryRunner qr = new TxQueryRunner(); /* * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。 * * BeanListHandler --> 它是ResultSetHandler的实现类, * 它的作用是把结果集封装到List
对象中 */ List
list = qr.query(sql, new BeanListHandler
(Person.class)); System.out.println(list); } /** * 使用MapHandler,把单行结果集封装到Map对象中 * @throws SQLException */ @Test public void testQuery3() throws SQLException { String sql = "select * from t_person where pid=?"; QueryRunner qr = new TxQueryRunner(); /* * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。 * * BeanListHandler --> 它是ResultSetHandler的实现类, * 它的作用是把结果集封装到List
对象中 */ Map
map = qr.query(sql, new MapHandler(), "1"); System.out.println(map); } /** * 使用MapListHandler,把多行结果集封装到List
中,即多个Map * 一行对应一个Map,多行对应List * @throws SQLException */ @Test public void testQuery4() throws SQLException { String sql = "select * from t_person"; QueryRunner qr = new TxQueryRunner(); /* * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。 * * BeanListHandler --> 它是ResultSetHandler的实现类, * 它的作用是把结果集封装到List
对象中 */ List
> mapList = qr.query(sql, new MapListHandler()); System.out.println(mapList); } /** * 使用ScalarHandler,把单行单列的结果集封装到Object中 * @throws SQLException */ @Test public void testQuery5() throws SQLException { String sql = "select count(*) from t_person";//结果集是单行单列的 QueryRunner qr = new TxQueryRunner(); Object obj = qr.query(sql, new ScalarHandler()); /* * 我们知道select count(1),结果一定是个整数! * > Integer * > Long * > BigInteger * * 不同的驱动,结果不同! * 无论是哪种类型,它都是Number类型!强转成Number一定不出错 */ Number number = (Number)obj; long cnt = number.longValue(); System.out.println(cnt); }}

 

转载于:https://www.cnblogs.com/fingerboy/p/5149113.html

你可能感兴趣的文章
正则替换
查看>>
jsp 环境配置记录
查看>>
快速学习的方法论
查看>>
线程之线程标识
查看>>
本地视频播放黑屏,有声音
查看>>
Python3-Cookbook总结 - 第一章:数据结构和算法
查看>>
算法Hash
查看>>
剑指offer-丑数
查看>>
Java网页数据采集器[下篇-数据查询]【转载】
查看>>
企业云存储云办公方案
查看>>
Python03
查看>>
CSS单位分析及CSS颜色表示法、颜色表(调色板)
查看>>
设计模式---(设计原则)面向对象设计原则
查看>>
WebGoat教程学习(三)--Ajax安全
查看>>
CF 1029E Tree with Small Distances
查看>>
LOJ 2537 「PKUWC2018」Minimax
查看>>
location.origin兼容IE
查看>>
[BZOJ1602] [Usaco2008 Oct] 牧场行走 (LCA)
查看>>
中间件笔记
查看>>
[SDOI2009]晨跑
查看>>