zoukankan      html  css  js  c++  java
  • (java)了解与学习使用DBUtils

    一、DBUtils是什么?

      DBUtils是一个对JDBC进行简单封装的开源工具类库。

    二、其优点是什么?

      对JDBC进行了简单封装,使用方便,提高开发效率。

    三、DBUtils快速入门:

    准备工作

     1、项目导入c3p0,DBUtils,mysql连接驱动的jar包,并配置c3p0。ps:不会配置c3p0的童鞋可以看这里:了解与学习c3p0

     2、新建表:

    1 create table user(
    2     uid int,
    3     uname varchar(55),
    4     upassword varchar(55)
    5 );

      3、在你的类中新建一个QueryRunnerl类的成员变量用于方便测试:

    比如我的是这样子的:

    1 package test;
    2 
    3 import org.apache.commons.dbutils.QueryRunner;
    4 
    5 public class Main {
    6     public static QueryRunner qr = new QueryRunner(C3p0.getDataSource()); //传递c3p0连接池对象
    7 }

    四、使用DBUtils执行DML(增、删、改)操作:

      1、添加数据:

    1 public static void insert() throws SQLException {
    2     String sql = "insert into user values(?,?,?)"; 
    3     int row = qr.update(sql,1001,"张三");
    4     if(row>0) {
    5         System.out.println("执行操作成功!");
    6     }else {
    7         System.out.println("执行操作失败!!!");
    8     }
    9 }

      查看控制台输出:

      查看user表:

    代码分析:主要使用到了QueryRunner中的update方法,第一个参数传递的是sql语句,第二个与其后的参数对应的是sql中的?占位符。

    update返回的参数类型为int型,若返回的参数>0则表示操作成功。

      另一种写法:

     1 public static void insert() throws SQLException {
     2     String sql = "insert into user values(?,?,?)"; 
     3     Object[] paramsArr = {1002,"李四","qwer1122"};
     4     int row = qr.update(sql,paramsArr);
     5     if(row>0) {
     6         System.out.println("执行操作成功!");
     7     }else {
     8         System.out.println("执行操作失败!!!");
     9     }
    10 }

      查看控制台输出: 

      查看user表:

      代码分析:

        与第一种写法不同的是,update传递的的参数sql后面的参数变为一个类型为Object的对象数组,这个对象数组封装了要传递的参数。

      你认为哪种方式更好呢?

      2、删除数据:

      

    1 public static void delete() throws SQLException {
    2     String sql = "delete from user where uname = ?";
    3     int row = qr.update(sql,"张三");
    4     if(row>0) {
    5         System.out.println("执行操作成功!");
    6     }else {
    7         System.out.println("执行操作失败!!!");
    8     }
    9 }

      查看控制台输出:

      

      查看user表:

      

     代码分析:看了添加数据的操作,这里估计也能看懂了吧?滑稽.jpg

      3、修改数据:

    1 public static void update() throws SQLException {
    2     String sql = "update user set uname=? where uid = ?";
    3     int row = qr.update(sql,"小天琪",1002);
    4     if(row>0) {
    5         System.out.println("执行操作成功!");
    6     }else {
    7         System.out.println("执行操作失败!!!");
    8     }
    9 }

      直接查看user表:

      

      代码分析:你懂的~~狗头.jpg保命。

    五、使用DBUtils进行DQL(查询操作) 重点

      先向user表中添加几行数据:

    1 insert into user values(1003,"王二","ew123");
    2 insert into user values(1004,"麻子","aab111");
    3 insert into user values(1005,"狗子","aac122");

      查看一波user表:

      

       1、第一种处理方式使用ArrayHandler(返回查询结果的第一行数据):

    1 public static void dqlUseArrayHandler() throws SQLException { //查询结果为一个对象数组,存的是查询结果的第一行
    2     String sql = "select * from user";
    3     Object[] resultsArr = qr.query(sql,new ArrayHandler());
    4     for(Object obj : resultsArr) { //遍历结果数组
    5         System.out.print(obj+" ");
    6     }
    7 }

      控制台输出:

       

      2、第二种处理方式使用ArrayListHandler(返回一个存有对象数组的集合,对象数组存的是每行数据):

      

     1 public static void dqlUseArrayListHandler() throws SQLException{ //查询结果为一个List集合,存的是对象数组,而对象数组存的是查询到的每行数据
     2     String sql = "select * from user";
     3     List<Object[]> resultsArr = qr.query(sql,new ArrayListHandler());
     4     for(Object[] objArr : resultsArr) { //遍历结果
     5         for(Object obj : objArr) {
     6             System.out.print(obj+" ");
     7         }
     8         System.out.println();
     9     }
    10 }

      查看控制台输出:

      

       3、使用BeanHandler(返回查询到的第一行数据封装为一个javaBean):

      先创建一个javaBean,名称为:User.java。字段名与user表的字段一致。

      我这里建的为:

     1 package test;
     2 
     3 public class User {
     4     private int uid;
     5     private String uname;
     6     private String upassword;
     7     public User() {}
     8     public int getUid() {
     9         return uid;
    10     }
    11     public void setUid(int uid) {
    12         this.uid = uid;
    13     }
    14     public String getUname() {
    15         return uname;
    16     }
    17     public void setUname(String uname) {
    18         this.uname = uname;
    19     }
    20     public String getUpassword() {
    21         return upassword;
    22     }
    23     public void setUpassword(String upassword) {
    24         this.upassword = upassword;
    25     }
    26     @Override
    27     public String toString() {
    28         return "User [uid=" + uid + ", uname=" + uname + ", upassword=" + upassword + "]";
    29     }
    30     
    31 }

      ps:javaBean其实就是一个类,与普通类相比具有的特征:

    • 提供一个默认的无参构造函数。
    • 需要被序列化并且实现了 Serializable 接口。
    • 可能有一系列可读写属性。
    • 可能有一系列的 getter 或 setter 方法。

      使用BeanHandler的查询处理方式:

    1 public static void dqlUseBeanHandler() throws SQLException { //将查询结果的第一行数据封装为javaBean
    2     String sql = "select * from user";
    3     User user = qr.query(sql,new BeanHandler<User>(User.class));
    4     System.out.println(user);
    5 }

      控制台输出:

      

       4、第四种方式使用BeanListHandler(将查询结果封装为javaBean并存入到一个List集合中):

    1 public static void dqlUseBeanListHandler() throws SQLException { //将所有的查询结果封装为javaBean,每个javaBean存入到一个list集合中
    2     String sql = "select * from user";
    3     List<User> listUser = qr.query(sql,new BeanListHandler<User>(User.class));
    4     for(User user : listUser) { //遍历结果
    5         System.out.println(user);
    6     }
    7 }

      控制台输出:

      

       5、第5种处理方式使用ColumnLIstHandler(传递一个列名,查询结果为该列下的所有数据,存入一个List集合中):

    1 public static void dqlUseColumnListHandler() throws SQLException { //传递一个列名,查询结果为该列下的所有数据,存入一个List集合中
    2     String sql = "select * from user";
    3     List<Object> listUser = qr.query(sql,new ColumnListHandler("uname"));
    4     for(Object obj : listUser) {
    5         System.out.println(obj);
    6     }
    7 }

      控制台输出:

      

       6、第6种方式使用ScalarHandler(查询结果只有一个):

      

    1 public static void dqlUseScalarHandler() throws SQLException { //查询结果只有一个
    2     String sql = "select count(*) from user";
    3     Object count = qr.query(sql,new ScalarHandler());
    4     System.out.println(count);
    5 }

      控制台输出:

      

    7、第7种处理方式使用MapHandler(将查询第一条数据的列名与值存入一个Map集合):

    1 public static void sqlUserMapHandler() throws SQLException { //查询结果的第一条数据存入一个map集合种
    2     String sql = "select * from user";
    3     Map<String,Object> map = qr.query(sql,new MapHandler());
    4     for(String key : map.keySet()) { //遍历结果集
    5         System.out.print(key + " "+map.get(key)+" ");
    6     }
    7 }

      控制台输出:

      

     8、第8种处理方式使用MapHandler(将查询到的结果存入一个map集合中):

     1 public static void sqlUserMapListHandle() throws SQLException { //将查询到的所有结果的列名与对应的值存入map集合中,map过多存入list集合
     2     String sql = "select * from user";
     3     List<Map<String,Object>> list = qr.query(sql,new MapListHandler());
     4     for(Map<String,Object> map : list) { //遍历集合
     5         for(String key : map.keySet()) {
     6             System.out.print(map.get(key) + " ");
     7         }
     8         System.out.println(" ");
     9     }
    10 }

      控制台输出:

      

       完 2020-06-02 20:47:14
  • 相关阅读:
    20171130-构建之法:现代软件工程-阅读笔记
    软件工程课程总结
    团队编程项目作业6-程序维护
    团队-象棋游戏-项目总结
    20171117-构建之法:现代软件工程-阅读笔记
    团队-象棋游戏-团队一阶段互评
    课后作业-阅读任务-阅读笔记-1
    课后作业-阅读任务-阅读提问-1
    课后作业-阅读任务-阅读提问-2
    阿里云部署node坑
  • 原文地址:https://www.cnblogs.com/wmskywm/p/13033302.html
Copyright © 2011-2022 走看看