一、在上一章中,使用了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();