美文网首页
1704-MySQL-DBUtils的增删改查操作

1704-MySQL-DBUtils的增删改查操作

作者: Holtto | 来源:发表于2017-07-31 23:47 被阅读72次

    1,说明:

    DBUtils是java编程中数据库操作的实用工具,小巧简单实用。第一个操作数据库的框架(jar)
    DBUtils封装了许多JDBC的代码,简化了JDBC操作,可以少写很多代码
    DBUtils三个核心功能的介绍:
    DBUtils类:
    它就是一个工具类,定义了关闭资源和事务处理的方法

    QueryRunner类:
    提供了对sql语句操作的方法,query():查询,update():修改

    ResultSetHandler接口:
    用于定义select操作后,如何封装结果集
    QueryRunner核心类
    QueryRunner(DataSource ds):提供数据源(连接池)DataSource,DBUtils底层自动维护和连接Connection数据库query(String sql, ResultSetHandler<T> rsh, Object... params):执行查询语句select
    update(String sql, Object... params):执行更新语句insert,update,delete,参数就是一个数组,参数个数取决于sql语句中?的个数


    2. ResultSetHandler结果集处理

    Handler类型 说明
    BeanHandler 将结果集中第一条记录封装到一个指定的javaBean中。
    BeanListHandler 将结果集中每一条记录封装到指定的javaBean中,将这些javaBean在封装到List集合中
    ScalarHandler 它是用于单个数据。例如select count(*) from 表操作。
    ArrayHandler 将结果集中的第一条记录封装到一个Object[]数组中,数组中的每一个元素就是这条记录中的每一个字段的值
    ArrayListHandler 将结果集中的每一条记录都封装到一个Object[]数组中,将这些数组在封装到List集合中。
    ColumnListHandler 将结果集中指定的列的字段值,封装到一个List集合中
    KeyedHandler 将结果集中每一条记录封装到Map<String,Object>,在将这个map集合做为另一个Map的value,另一个Map集合的key是指定的字段的值。
    MapHandler 将结果集中第一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值
    MapListHandler 将结果集中每一条记录封装到了Map<String,Object>集合中,key就是字段名称,value就是字段值,在将这些Map封装到List集合中。

    3. javaBean组件

    JavaBean就是一个类,在开发中常用于封装数据。具有如下特性
    1.需要实现接口:java.io.Serializable ,通常偷懒省略了。
    2.提供私有字段:private 类型 字段名;
    3.提供getter/setter方法:
    4.提供无参构造
    javabean类:User类

      public class User{
            private int Uid;
            private String Uname;
    public User() {
             
        }
        public int getUid() {
            return Uid;
        }
        public void setUid(int uid) {
            this.Uid = uid;
        }
        public String getUname() {
            return Uname;
        }
        public void setUname(String uname) {
            this.Uname = uname;
        }
        public String getUpassword() {
            return Upassword;
        }
        public void setUpassword(String upassword) {
            this.Upassword = upassword;
        }
                
    }
    

    4. DBUtils完成CRUD

    首先必须用C3P0编写一个工具类,所以要提供C3P0的jar包和xml配置文件,其次还需要DBUtils的jar包 :

    commons-dbutils-1.4.jar

    编写测试类
    根据C3P0的工具类创建连接池
    根据要求用QueryRunner完成查询和更新,用ResultSetHandler完成结果集操作
    释放资源(DBUtils查询完自动放回连接或关闭资源)


    5. 练习

    对user表增删改查

    1、增(update)
    要求:向user表添加一条数据:null,"王五",“赵六"

    @Test
    public void insert() {
        //1:通过连接池获取QueryRunner对象,QueryRunner底层自动维护和获取连接对象Connection
        //QueryRunner()中传入连接池,因此要在C3P0Utils里面加入获取连接池的方法,getDataSource()
        QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());
    
        //2:编写sql语句
        String sql = "insert into user values(?,?,?)";
    
        //3:使用QueryRunner的update()方法进行操作
        Object[] params = {null,"王五",“赵六”};
        try {
            qr.update(sql, params);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    

    2、删(update)

    //从user表中删除name为李二的数据

    @Test
    public void delete() {
        //1:通过连接池获取QuerryRunner对象
        QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());
    
        //2:编写sql语句
        String sql = "delete from user where name=?";
    
        //3.使用QueryRunner的update方法执行sql语句
        Object[] params = {"李二"};
        try {
            qr.update(sql, params);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    

    3、改(update)

     @Test
    public void alter() {
        //1:通过连接池获取QueryRunner对象
        QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());
    
        //2:编写sql语句
        String sql = "update user set Upassword=? where Uname=?";
    
        //3:使用QueryRunner对象的update方法执行sql语句
        Object[] params = {88,"张三"};
        try {
            qr.update(sql, params);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    

    4、查(query)
    要求:查询user表中所有人的信息(查询许多行信息)
    //查询user表中所有人的信息

    @Test
    public void queryAll() {
        //1:通过连接池获取QueryRunner对象
        QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());
    
        //2:编写sql语句
        String sql = "select * from user";
    
        //3:使用QueryRunner的query方法查询
        Object[] params = {};
        try {
            //获取所有人的数据,使用BeanListHandler<>(User.class),以User封装得到的字段信息,
                存储入集合List
            List<User> user = qr.query(sql, new BeanListHandler<>(User.class), params);
            System.out.println(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    

    要求:查询user表中name为李四的信息(查询一行信息)

    @Test
    public void query() {
        //1:通过连接池获取QueryRunner对象
        QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());
    
        //2:编写sql语句
        String sql = "select * from user where name=?";
    
        //3:使用QueryRunner的query方法查询一行数据
        Object[] params = {"何一"};
        try {
            //查询一行数据,不需要用集合存储,用单个用户储存即可,因此用BeanHandler
            User userr = qr.query(sql, new BeanHandler<>(User.class), params);
            System.out.println(user);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
     
    //要求:统计user表中的人数
    @Test
    public void queryOne() {
        //1:通过连接池获取QueryRunner对象
        QueryRunner qr= new QueryRunner(C3P0Utils.getDataSource());
    
        //2:编写sql语句
        String sql = "select count(*) from user";
    
        //3:使用QueryRunner的query方法查询
        Object[] params = {};
        try {
            Object count = qr.query(sql, new ScalarHandler());
            System.out.println(count);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    }
    

    相关文章

      网友评论

          本文标题:1704-MySQL-DBUtils的增删改查操作

          本文链接:https://www.haomeiwen.com/subject/ctjdlxtx.html