java操作数据库增删改查的小工具1--TxQueryRunner

小编 2026-07-13 阅读:224 评论:0
在java程序中,一般使用jdbc连接数据库,比较麻烦,在看传智教程时学了一个工具类,用于简化与...

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

:java操作数据库增删改查的小工具1--TxQueryRunner

这个工具类的优点基本上就是阿帕奇出的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>(Person.class), "1");        System.out.println(p);    }        /**     * 使用BeanListHandler     *   把多行结果集映射到List<Bean>,即多个JavaBean对象。     *   一行结果集记录对应一个javaBean对象,多行就对应List<Bean>     * @throws SQLException     */    @Test    public void testQuery2() throws SQLException {        String sql = "select * from t_person";        QueryRunner qr = new TxQueryRunner();        /*         * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。         *          * BeanListHandler --> 它是ResultSetHandler的实现类,         *   它的作用是把结果集封装到List<Person>对象中         */        List<Person> list = qr.query(sql, new BeanListHandler<Person>(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<Person>对象中         */        Map<String, Object> map = qr.query(sql, new MapHandler(), "1");        System.out.println(map);    }        /**     * 使用MapListHandler,把多行结果集封装到List<Map>中,即多个Map     *   一行对应一个Map,多行对应List<Map>     * @throws SQLException     */    @Test    public void testQuery4() throws SQLException {        String sql = "select * from t_person";        QueryRunner qr = new TxQueryRunner();        /*         * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型。         *          * BeanListHandler --> 它是ResultSetHandler的实现类,         *   它的作用是把结果集封装到List<Person>对象中         */        List<Map<String, Object>> 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);    }}

 

版权声明

本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。

热门文章
  • Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering

    Sequential Monte Carlo Methods (SMC) 序列蒙特卡洛/粒子滤波/Bootstrap Filtering
    Problem Statement 我们考虑一个具有马尔可夫性质、非线性、非高斯的状态空间模型(State Space Model):对于一个时间序列上的观测结果{yt,t∈N}\\{ y_t , t \\in N \\}{yt​,t∈N},我们认为每个观测结果yty_tyt​的生成依赖于一个无法直接观察的隐变量xt∈{xt,t∈N}x_t \\in \\{x_t , t \\in N \\}xt​∈{xt​,t∈N},即:p(...
  • 机房智能化温湿度解决方式之POE供电以太网温湿度传感器

    机房智能化温湿度解决方式之POE供电以太网温湿度传感器
    机房智能化温湿度解决方式之POE供电以太网温湿度传感器 北京盈创力和电子科技有限公司 智能型TCP网口温湿度记录仪 北京IP网络温湿度记录仪厂家,北京盈创力和 北京智能型TCP网口温湿度记录仪IP网络温湿度记录仪是一种新型的基于TCP/IP协议双绞线以太网标准温湿度采集模块,利用它可以实现现场温度值、相对湿度值的采集,同时利用其自身的RJ45通信接口可以方便地和机房监控主机或交换机集线器进行联网。 工作于-40℃~85℃工业级带...
  • Hive 系统函数及示例

    Hive 系统函数及示例
    查看所有系统函数 show functions; 函数分类 内置函数【系统函数】 数学函数: floor、round、ceil、cos、log2等 字符串函数: length、reverse、trim、lower、get_json_object、repeat等 收集函数: size 转换函数: cast 日期函数: year、month、datediff、date、date_add等 条件函数: coalesce、case…w...
  • CSRF的原理和防范措施

    CSRF的原理和防范措施
    a)攻击原理:i.用户C访问正常网站A时进行登录,浏览器保存A的cookieii.用户C再访问攻击网站B,网站B上有某个隐藏的链接或者图片标签会自动请求网站A的URL地址,例如表单提交,传指定的参数iii.而攻击网站B在访问网站A的时候,浏览器会自动带上网站A的cookieiv.所以网站A在接收到请求之后可判断当前用户是登录状态,所以...
  • HTTP状态保持的原理

    HTTP状态保持的原理
    a)在用户登录之后,浏览器返回响应的时候会在响应中添加上cookieb)浏览器接收到cookie之后会自动保存c)当用户再次请求同一服务器中的其他网页的时候,浏览器会自动带上之前保存的cookied)服务接收到请求之后可以请 request 对象中取到cookie 判断当前用户是否登录  Http是无状态的,就是连接时数据互通,关闭后...
标签列表