使用DbUtils的第一步,导入相关jar包:

 

DB Browser for SQLite怎么连接数据库 dbutils连接数据库_List

 

 

DB Browser for SQLite怎么连接数据库 dbutils连接数据库_结果集_02

 

驱动jar包与dbutils的工具jar包,缺一不可。

1、创建工程,导入相关jar包,然后add to build path

 

 

DB Browser for SQLite怎么连接数据库 dbutils连接数据库_结果集_03

 

 

2、使用DbUtils完成数据库操作

步骤:

获取数据库连接

创建QueryRunner对象

使用QueryRunner对象执行sql语句

处理结果

释放资源

第一步获取连接中包含了加载驱动、获取连接,所以本质上还是六步操作!

(1)   、添加操作
//添加操作
    public static void insertDemo() {
        //1、获取数据库连接
        Connection connection = JDBCUtils.getConnection();
        //2、创建QueryRunner核心对象,替换了原生jdbc的语句平台
        QueryRunner qRunner = new QueryRunner();
        //3、执行sql语句
        /*
            QueryRunner对象在执行增删改语句时,方法都是update()
            update()方法的返回值是整型数字,代表影响的记录条数
            update()方法此时需要传入连接对象,虽然有六个重载方法,我们只需要记住两个即可
            update(connection, sql) 此方法的sql语句中不能使用?来代替值
            update(connection, sql, 可变参数) 此方法中的sql可以使用?来代替值,因为可以传入绑定的参数!
         */
        try {
            //无参方法的演示
            //int row = qRunner.update(connection, "insert into user values (null, '王豫川', '222', '男')");
           
            /*
                可变参数 Object... 代表参数是动态数量,也就是参数个数不确定!
                可变参数的传递方式:
                1、直接传数组。Object[],在数组中为?挨个填写对应的值,要保证?的个数与值的个数一致,
                值的类型要与?替代的类型一致
                2、将参数挨个书写,使用逗号隔开,但是要注意的是,值的个数与?个数一致,而且类型也得一致
                推荐使用第二种!!!
             */
            //有参方法的演示
            /*
            Object[] objs = {"小哈", "438", "男"};
            int row = qRunner.update(connection, "insert into user values (null, ?, ?, ?)", objs);*/
            int row = qRunner.update(connection, "insert into user values (null, ?, ?, ?)",
                                                "骚超", "333", "女");
            System.out.println(row > 0 ? "添加成功" : "添加失败");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            //释放资源
            try {
                DbUtils.close(connection);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
(2)   、删除操作
//删除操作
    public static void deleteDemo() throws SQLException {
        Connection connection = JDBCUtils.getConnection();
        QueryRunner qRunner = new QueryRunner();
        int row = qRunner.update(connection, "delete from user where uid = ?", 10);
        System.out.println(row > 0 ? "删除成功" : "删除失败");
        DbUtils.close(connection);
    }
(3)   、修改操作
//修改操作
    public static void updateDemo() {
        Connection connection = JDBCUtils.getConnection();
        QueryRunner qRunner = new QueryRunner();
        try {
            int row = qRunner.update(connection, "update user set uname = ?, pwd = ?, gender = ? where uid = ?",
                                        "馊丸子", "222", "女", 2);
            System.out.println(row > 0 ? "修改成功" : "修改失败");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                DbUtils.close(connection);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }

(4)、查询操作

查询结果集封装的接口为ResultSetHandler

这个接口有八大实现类:

ArrayHandler

将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值

ArrayListHandler

将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。

BeanHandler  

将结果集中第一条记录封装到一个指定的javaBean中。

BeanListHandler

将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中

ColumnListHandler

将结果集中指定的列的字段值,封装到一个List集合中

ScalarHandler

它是用于单数据。例如select count(*) from 表操作。

MapHandler

将结果集第一行封装到Map集合中,Key 列名, Value 该列数据

MapListHandler

将结果集每一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合

示例代码:

//查询操作
    /*
        将结果集中第一条记录封装到一个指定的javaBean中
        javaBean 是java类的设计规范:
        当我们在设计实体类(model类,存储数据)时,需要注意以下几条规则:
        1、类必须是public修饰
        2、属性必须私有化
        3、私有化属性必须提供setter、getter方法
        4、必须保证类中无参构造的存在
     */
    public static void beanHandlerDemo() {
        Connection connection = JDBCUtils.getConnection();
        QueryRunner qRunner = new QueryRunner();
        /*
            QueryRunner对象在执行查询sql时,需要使用query()方法
            此时需要传入连接对象,只需要记住两个重载方法即可
            query(connection, sql, 结果集实现类) 此方法中的sql不支持?绑定数据
            query(connection, sql, 结果集实现类, 可变参数) 此方法中的sql支持?绑定数据
         */
        try {
            /*
                结果集在创建对象时,需要指定对象泛型以及对象类的类对象(反射)
                反射此时做的事情:
                1、通过反射可以找到类中的无参构造,来创建对象
                2、通过反射找到了setter方法,完成了对象中每一个属性的赋值(赋值的内容就是表中字段的内容)
                但是我们在使用时,一定要注意的问题是:
                1、必须保证无参构造存在,如果没有无参构造,创建不了对象,直接崩溃
                2、为了保证属性赋值的成功,属性名必须与表中字段名一致!!!
             */
            User user = qRunner.query(connection, "select * from user where uid = ?",
                                    new BeanHandler<User>(User.class), 3);
            System.out.println(user);
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
            try {
                DbUtils.close(connection);
            } catch (SQLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
/*
        BeanListHandler
        将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
     */
    public static void beanListHandlerDemo() throws SQLException {
        Connection connection = JDBCUtils.getConnection();
        QueryRunner qRunner = new QueryRunner();
        List<User> users = qRunner.query(connection, "select * from user", new BeanListHandler<User>(User.class));
        for (User user : users) {
            System.out.println(user);
        }
        DbUtils.close(connection);
    }
/*
        ScalarHandler
        它是用于单数据(聚合函数)。例如select count(*) from 表操作。
     */
    public static void scalarHandlerDemo() throws SQLException {
        Connection connection = JDBCUtils.getConnection();
        QueryRunner qRunner = new QueryRunner();
        long count = (Long)qRunner.query(connection, "select count(*) from user", new ScalarHandler());
        count = (int)count;
        System.out.println("总用户量为:" + count);
        DbUtils.close(connection);
    }
/*
        ArrayHandler
        将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
     */
    public static void arrayHandlerDemo() throws SQLException {
        Connection connection = JDBCUtils.getConnection();
        QueryRunner qRunner = new QueryRunner();
        Object[] objs = qRunner.query(connection, "select * from user where uid = ?",
                        new ArrayHandler(), 1);
        for (Object object : objs) {
            System.out.println(object);
        }
        DbUtils.close(connection);
    }
/*
        ColumnListHandler
        将结果集中指定的列的字段值,封装到一个List集合中
     */
    public static void columnListHandlerDemo() throws SQLException {
        Connection connection = JDBCUtils.getConnection();
        QueryRunner qRunner = new QueryRunner();
        List<Object> list = qRunner.query(connection, "select uname from user", new ColumnListHandler());
        for (Object object : list) {
            System.out.println(object);
        }
        DbUtils.close(connection);
    }
/*
        MapListHandler
        将结果集每一行封装到Map集合中,Key 列名, Value 该列数据,Map集合存储到List集合
     */
    public static void mapListHandlerDemo() throws SQLException {
        Connection connection = JDBCUtils.getConnection();
        QueryRunner qRunner = new QueryRunner();
        List<Map<String, Object>> list = qRunner.query(connection, "select * from user", new MapListHandler());
        for (Map<String, Object> map : list) {
            Set<String> set = map.keySet();
            for (String key : set) {
                System.out.print(map.get(key) + "--");
            }
            System.out.println();
        }
        DbUtils.close(connection);
    }