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();

猜你喜欢

转载自www.cnblogs.com/qqwhsj/p/10785838.html