数据库连接池用DBUtils工具操作数据库

通过数据库连接池连接

1.简介

为数据库建立的一个缓冲池,其中会放入一定数量的连接。
建立数据库连接时,从池中取出;用完时放回池中。

应用程序、连接池、数据库三者关系如下:
在这里插入图片描述

2.DataSource接口

JDBC提供的为了获取连接对象的接口,负责与数据库建立连接。
它的实现类称为数据源,创建连接的信息会存储在数据源中,通过数据源可以管理数据库连接池。

3.文件准备

不同的数据库连接池需要不同的连接池组件,以下将介绍DBCP数据库连接池实现数据库的连接。
需要以下四个包:
数据库驱动jar包下载一个即可-可翻阅往期文章
commons-dbcp.jar

commons-logging.jar

commons-pool.jar

导包流程上个笔记也有介绍

4.代码实现

(1).DBCP数据库连接池
手动创建实现连接:

public class dbcp3 {
        public static void main(String[] args) throws SQLException {
//        使用BasicDataSource具体实现类来连接数据库
            BasicDataSource bds = new BasicDataSource();
//        设置各种数据库连接参数
            bds.setDriverClassName("com.mysql.cj.jdbc.Driver");
            bds.setUsername("root");
            bds.setUrl("jdbc:mysql://localhost:3306/db1?serverTimezone=GMT%2B8");
            bds.setPassword("12345");
//        获取连接和连接信息
            Connection connection = bds.getConnection();
            System.out.println("连接成功!");
    }
}

通过配置文件创建实现连接:

#配置文件dbcpconfig.properties代码
driverClassName=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/db1?serverTimezone=GMT%2B8
#url=jdbc:mysql://localhost:3306/db1??useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8
username=root
password=12345
public class dbcp4 {
    public static void main(String[] args) throws Exception {
//        创建配置文件读取对象
        Properties p = new Properties();
//        创建配置文件的文件输入流
        InputStream in = Files.newInputStream(Paths.get("servletModule/src/dbcp/dbcpconfig.properties"));
//        将配置文件加载到对象中
        p.load(in);
//        将Properties对象放置到创建链接的方法中,这个操作就相当于之前的一堆set方法
        BasicDataSource bds = BasicDataSourceFactory.createDataSource(p);
//        然后就是获取连接以及打印连接信息
        Connection conn = bds.getConnection();
        System.out.println("数据库连接成功!");
     
    }
}

DBUtils拓展工具操作

(1).简介
是对JDBC的简单封装,可简化JDBC的编码工作。
(2).需要的工具包:
可按照需要更改jar包名
https://commons.apache.org/proper/commons-dbcp/download_dbcp.cgi
在这里插入图片描述
导入:
在这里插入图片描述

(3).核心类库(API)
[1].DBUtils类:
提供加载JDBC驱动、关闭资源的方法
[2].QueryRunner类:
执行SQL语句
[3].ResultSetHandler接口:
处理ResultSet结果集。
接口实现类:
BeanHandler-封装单条数据到JavaBean中
BeanListHandler-封装多条数据到JavaBean中,再放入List集合中
ColumnListHandler-封装指定列的数据,并放入集合中
ScalarHandler-封装单条列数据及聚合函数的执行结果
(4).代码运用
创建数据源对象

public class source {
    public static BasicDataSource getBasicDataSource() throws Exception {
//        创建配置文件读取对象
        Properties p = new Properties();
//        创建配置文件的文件输入流
        InputStream in = Files.newInputStream(Paths.get("servletModule/src/dbcp/dbcpconfig.properties"));
//        将配置文件加载到对象中
        p.load(in);
//        将Properties对象放置到创建链接的方法中,这个操作就相当于之前的一堆set方法
        BasicDataSource bds = BasicDataSourceFactory.createDataSource(p);
//        然后就是获取连接以及打印连接信息
        return bds;
    }
 }

使用DBUtils工具操作数据库

public class source {
    /**
     *不同返回结果类型的查询方法
     */

    public void selectAll() {
        Connection con = null;
        try {
            con = source.getBasicDataSource().getConnection();//通过dbcp获取连接
            QueryRunner runner = new QueryRunner(source.getBasicDataSource());//创建QueryRunner类,获取数据源对象
            String sql = "select * from stu1";
            //通过query执行查询操作,用beanlisthandler将查询结果封装成javabean-user类,放入 list集合中
            List<user> i = runner.query(sql, new BeanListHandler<user>(user.class));//封装多条数据
            for (user users : i) {//遍历输出结果
                System.out.println(users.getId() + ":" + users.getName() + ":" + users.getAge());
            }
            DbUtils.close(con);//dbutils工具提供的关闭资源的方法
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public void selectRow(int id) {
        Connection con = null;
        try {
            con = source.getBasicDataSource().getConnection();
            QueryRunner runner = new QueryRunner(source.getBasicDataSource());
            String sql = "select * from stu where id=?";
            //通过query执行查询操作,用beanlisthandler将查询结果封装成javabean-user类,放入 list集合中
            user u1 = (user) runner.query(sql, new BeanHandler(user.class), 3);//封装单行数据
            System.out.println("查询结果为:" + u1.toString());
            DbUtils.close(con);//dbutils工具提供的关闭资源的方法
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    public void selectColum(String i){
        Connection con = null;
        try {
            con = source.getBasicDataSource().getConnection();
            QueryRunner runner = new QueryRunner(source.getBasicDataSource());
            String sql="select * from stu ";
            //通过query执行查询操作,用ColumnListHandler将查询结果封装成javabean-user类,放入 list集合中
            List<user> list = (List<user>) runner.query(sql, new ColumnListHandler(i));//封装指定列数据
            System.out.println("输出为:"+list);
            DbUtils.close(con);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
        public void selectFunc(){
            Connection con = null;
            try {
                con = source.getBasicDataSource().getConnection();
                QueryRunner runner = new QueryRunner(source.getBasicDataSource());
                String sql2="select count(*) from stu ";
                //通过query执行查询操作,用ScalarHandler将查询结果封装成javabean-user类,放入 list集合中
                Object o2 = runner.query(sql2, new ScalarHandler());//封装聚集函数的执行结果
                System.out.println("输出为:"+o2);
                DbUtils.close(con);
            } catch (Exception e) {
                throw new RuntimeException(e);
            }
        }

            /**
     * 更新操作的示例
     */

    public void update(int id,String name,int age) {
        Connection con = null;
        try {
            con = source.getBasicDataSource().getConnection();
            QueryRunner runner = new QueryRunner(source.getBasicDataSource());
            String sql = "insert into stu1(id,name,age) values(?,?,?)";
            Object param[] = {id, name, age};//创建一个数组参数
            int i = runner.update(sql, param);//通过QueryRunner实现类update执行更新操作
            System.out.println("添加内容:" + i+"行");
            DbUtils.close(con);//通过DBUtils工具关闭资源
        } catch (Exception e) {
            throw new RuntimeException(e);
        }

    }
}

以上两段代码均是source类中定义的方法。

创建测试类

public class test {

    public static void main(String[] args) throws Exception {
        source source = new source();
        BasicDataSource dataSource = source.getBasicDataSource();
        System.out.println("查询所有信息:");
        source.selectAll();
        System.out.println("查询id为3的信息:");
        source.selectRow(3);
        System.out.println("查询姓名列信息:");
        source.selectColum("name");
        System.out.println("学生总人数:");
        source.selectFunc();
        System.out.println("插入一名学生信息");
        source.update(10,"顿顿",8);
    }
}

这篇文章是我对数据库连接池连接数据库的拓展,主要是想给大家介绍DBUtils工具对数据库操作的使用。如果觉得有帮助的话,不要吝啬你的小拇指哦!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值