• TxQueryRunner


    TxQueryRunner类是common-dbutils下QueryRunner类的子类,用来简化JDBC操作。TxQueryRunner类内部使用了JdbcUtils.getConnection()类来获取连接对象,以及使用JdbcUtils.releaseConnection()关闭连接。

    • int[] batch(String sql, Object[][] params):执行批处理,参数sql是SQL语句模板,params为参数;
    • T query(String sql, ResultSetHandler<T> rh):执行查询,执行查询,参数sql为要执行的查询语句模板,rh是结果集处理,用来把结果集映射成你想要的结果;
    • T query(String sql, ResultSetHandler<T> rh, Object… params):执行查询,参数sql为要执行的查询语句模板,rh是结果集处理,用来把结果集映射成你想要的结果,params是sql语句的参数;
    • int update(String sql):执行增、删、改语句,参数sql是要执行的SQL语句;
    • int update(Stringsql, Object param):执行增、删、改语句,参数sql是要执行的SQL语句,参数param是参数(一个参数);
    • int update(String sql, Object… params):执行增、删、改语句,参数sql是要执行的SQL语句,参数params是参数(多个参数);

    为了测试TxQueryRunner,在test数据库下创建person表:

    表person:

    image

    测试代码:

    测试update方法
    public class TxQueryRunnerTest {
        /**
         * 测试update方法
         * @throws SQLException
         */
        @Test
        public void testUpdate() throws SQLException {
            String sql="insert into person(pid, pname, age) values(?,?,?)";
            Object[] params = {"1","p1", "18"};//给sql中对应的参数
            QueryRunner qr = new TxQueryRunner();//没有给对象提供连接池
            qr.update(sql, params);
            
        }
        //使用事务
        @Test
        public void testUpade2() throws Exception{
            try {
                JdbcUtils.beginTransaction();
                
                String sql="insert into person(pid, pname, age) values(?,?,?)";
                QueryRunner qr = new TxQueryRunner();
                
                Object[] params = {"2","p2", "18"};
                qr.update(sql,params);//执行
                
                /*取消注释,演示抛出异常时,事件回滚情况
                if(true){
                    throw new Exception();
                }
                */
                
                params = new Object[]{"3","p3", "18"};
                qr.update(sql, params);//执行
                
                JdbcUtils.commitTransaction();//提交事务
            } catch (Exception e) {
                try {
                    JdbcUtils.rollbackTransaction();//回滚事件
                } catch (SQLException e1) {
                }
                /*throw e;*/
            }
        }
    }

    执行结果

    image

    测试query方法
    public class TxQueryRunnerTest {
        /**
         * 测试查询方法
         * 我们知道jdbc查询的结果是ResultSet
         * 而QueryRunner查询的结果是通过ResultSet映射后的数据。
         *         QueryRunner第一步是执行select,得到ResultSet
         *         把ResultSet转换成其他类型
         * 通过转换结果:
         *         JavaBean:把结果集封装到JavaBean中
         *         Map:把结果集封装到Object中(结果集是当行单列)
         * @throws SQLException 
         * 
         */
        //单行结果集映射到javaBean中
        @Test
        public void testQuery1() throws SQLException{
            String sql = "select * from person where pid=?";
            QueryRunner qr = new TxQueryRunner();
            /*
             * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型
             * BeanHandler → 它是ResultSetHandler的实现类,它的作用是把结果集封装到person对象中
             * 注意:结果集的列名与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 person";
            QueryRunner qr = new TxQueryRunner();
            /*
             * 第二个参数类型为ResultSetHandler,它是一个接口,表示映射的结果类型
             * BeanHandler → 它是ResultSetHandler的实现类,
             * 它的作用是把结果集封装到List<person>对象中
             * 注意:结果集的列名与person的属性名必须相同
             */
            List<Person> list = qr.query(sql, new BeanListHandler<Person>(Person.class));
            System.out.println(list);
        }
        
    }

    testQuery1()

    image

    testQuery2()

    image

    public class TxQueryRunnerTest {
        /**
         * 使用BeanListhandler
         * 把单行结果集映射到Map对象中
         * @throws SQLException 
         */
        @Test
        public void testQuery3() throws SQLException {
            String sql = "select * from person where pid=?";
            QueryRunner qr = new TxQueryRunner();
        
            Map<String,Object> map = qr.query(sql, new MapHandler(),"1");
            System.out.println(map);
        }
        /**
         * 使用BeanListhandler
         * 把多行结果集封装到List<Map>,即多个Map对象
         * 一行对应一个Map对象,多行就对应List<Map>
         * @throws SQLException 
         */
        @Test
        public void testQuery4() throws SQLException {
            String sql = "select * from person";
            QueryRunner qr = new TxQueryRunner();
            
            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 person";//结果集是单行单列
            QueryRunner qr = new TxQueryRunner();
            
            Object obj = qr.query(sql, new ScalarHandler());
            /*
             * 我们知道select count(*),结果一定是个整数!
             * >Integer
             * >Long
             * >BigInteger
             * 
             * 不同的驱动,结果不同!
             * 无论是哪种类型,它都是Number类型,强转化成Number一定不出错
             */
            Number number = (Number)obj;
            long cnt = number.longValue();
            System.out.println(cnt);
        }
    }

    testQuery3()

    image

    testQuery4()

    image

    testQuery5()

    image

  • 相关阅读:
    php的运行模式
    PostgreSQL指定用户可访问的数据库pg_hba.conf
    PostgreSQL创建只读用户
    Python操作PostGreSQL数据库
    Python爬虫基础示例
    Linux下设置tomcat开机自启
    Windows下配置jar环境
    警告1909。无法创建快捷方式VMware Workstation Pro.Ink。解决方法(附 VMware_workstation 12的安装方法)
    删数问题
    An Easy Problem
  • 原文地址:https://www.cnblogs.com/suxiaoxia/p/6833231.html
Copyright © 2020-2023  润新知