• JDBC学习(二)--C3p0使用


    一、在上一章中,使用了JDBC最为原始的操作(相对),完成了增删改查操作。但是发现了几个问题。

    1.对于连接操作,我们需要的仅仅只是配置URL,Driver,username,password等参数,其他的代码执行完全相同。

    2.如果我们通过代码直接编写,不仅仅麻烦反而会造成代码反复修改的代价以及风险。

    二、配置properties文件来完成Connection连接

    1.创建properties文件,并在文件中配置需要使用的(key-value对应的)参数,内容如下:

    forname=com.mysql.cj.jdbc.Driver
    url=jdbc:mysql://localhost:3306/emps?serverTimezone=UTC&characterEncoding=utf-8&useSSL=false
    user=root
    password=123456

    2.在DBUtil包中创建DB类,并且实例化一个Properties对象并且使用内置方法getProperty方法获得各个参数,并使用DriverManager方法执行getConnection语句。

       static Properties properties =new Properties();
        static{
            try {
                properties.load(new FileInputStream("db.properties"));
                Class.forName(properties.getProperty("forname"));
    
            }catch (Exception e){
                e.printStackTrace();
            }
        }
        public static Connection getConnection() {
            Connection conn=null;
            try {
                String url =properties.getProperty("url");
                String user=properties.getProperty("user");
                String password=properties.getProperty("password");
                conn = DriverManager.getConnection(url,user, password);
            } catch (Exception e) {
                e.printStackTrace();
            }finally {
                return conn;
            }

    3.优点:避免了直接改动代码来修改参数,可以直接更改配置文件。

    4.缺点:仅仅只是将配置提出,并未解决代码过于繁琐的问题,且在高访问的操作中,我们需要不停的创建并销毁连接,造成了资源的消耗。

    三、连接池的使用

    1.连接池思路与线程池相似,常用的连接池有DBCP,Bonecp,C3p0等,这里使用的是C3p0.

    2.连接池的原理:在正常的连接操作中,当连接使用完毕后,需要将连接释放,而连接池则会将连接置为空并保留连接,直到设定的时间内没有任何连接使用才关闭连接。

    3.连接池中除了设置连接需要的参数之外,还需要设置默认连接数量,最大连接数量以及连接闲置时间的设定。

    上图就是默认5个连接,最大连接数为10个,当3000毫秒没有连接加入时,会将连接关闭。

    三、C3p0的使用

    1.C3p0是常用的连接池的一种,在参数配置时思路与properties相同,只是将信息保存在更易于操作,控制的xml文件中。c3p0也将连接等固定操作写入内置方法之中

    2.jar包使用:c3p0-0.9.5.2.jar

    3.ComboPooledDataSource类:使用方法getConnection方法获得连接池。

    private ComboPooledDataSource datasource =new ComboPooledDataSource();
    
    return datasource.getConnection();
  • 相关阅读:
    Eclipse下进行SVN提交时报“svn: Transaction is out of date
    【Spring学习】Spring事物管理之aop技术
    【框架学习】ibatis DAO框架分析
    【maven详解-插件】maven 插件机制
    【maven详解-插件】maven插件学习之maven-source-plugin
    关于使用 no-js (Modernizr)
    白话讲MyIsam和InnoDB的区别
    向鼠标右键菜单增加菜单项
    表单提交按钮input和button、a的差异
    MySQL数据库索引的设计原则
  • 原文地址:https://www.cnblogs.com/qqwhsj/p/10785838.html
Copyright © 2020-2023  润新知