这个网址我看过之后 觉得有很详细的理解:

希望能够帮助到大家:https://www.cnblogs.com/CQY1183344265/p/5854418.html

加油哦~

 

简介:

一:Dbutils是什么?(当我们很难理解一个东西的官方解释的时候,就让我们记住它的作用)

     Dbutils:主要是封装了JDBC的代码,简化dao层的操作。

     作用:帮助java程序员,开发Dao层代码的简单框架。

          框架的作用:帮助程序员,提高程序的开发效率。

 

二:为什么需要Dbutils ?

     在使用Dbutils 之前,我们Dao层使用的技术是JDBC,那么分析一下JDBC的弊端:

          (1)数据库链接对象、sql语句操作对象,封装结果集对象,这三大对象会重复定义

          (2)封装数据的代码重复,而且操作复杂,代码量大

          (3)释放资源的代码重复

               结果:(1)程序员在开发的时候,有大量的重复劳动。(2)开发的周期长,效率低

三:Dbutils三个核心类介绍:

     1:DbUtils:连接数据库对象----jdbc辅助方法的集合类,线程安全

          构造方法:DbUtils()

          作用:控制连接,控制书屋,控制驱动加载额一个类。

     

     2:QueryRunner:SQL语句的操作对象,可以设置查询结果集的封装策略,线程安全。

  构造方法:

   (1)QueryRunner():创建一个与数据库无关的QueryRunner对象,后期再操作数据库的会后,需要手动给一个Connection对象,它可以手动控制事务。

Connection.setAutoCommit(false);设置手动管理事务

 Connection.commit();     提交事务

(2)QueryRunner(DataSource ds):创建一个与数据库关联的queryRunner对象,后期再操作数据库的时候,不需要Connection对象,自动管理事务。

DataSource:数据库连接池对象。

 

 

四:Dbutils快速入门

     使用Dbutils注意事项:

需要导入的jar包:

①MySql驱动

②c3p0包  

③DbUtils包

          (2)添加c3p0配置文件

          (3)可以自行添加一个JDBCUtils工具类:用来获取c3p0连接池对象

 

c3p0-config.xml

<? xml version ="1.0" encoding= "UTF-8" ?>

JDBC连接池&DBUtils

 

代码对比

使用DBUtils

/**
 * 添加用户
 * @param user 待添加的用户
 * @return 成功添加的用户
 */

public static int add(User user){
    Connection conn= DButilC3P0.getConnection();
    String sql="insert into user values(?,?,?,?,?)";
    QueryRunner qr=new QueryRunner();
    Object []params ={user.getCardId(),user.getPassword(),user.getName(),user.getPhone(),user.getSex()};
    try {
        return qr.update(conn,sql,params);//受影响的行数
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return 0;
}

 

 

没有使用DBUtils

public static int add(User user){
    Connection conn= DButilC3P0.getConnection();
    String sql="insert into user values(?,?,?,?,?)";
    try {
        PreparedStatement ps=conn.prepareStatement(sql);
        ps.setString(1,user.getCardId());
        ps.setString(2, user.getPassword());
        ps.setString(3, user.getName());
        ps.setString(4, user.getPhone());
        ps.setByte(5, user.getSex());
        return ps.executeUpdate();//执行语句
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return 0;
}

 

相关文章: