传统获取Connection问题分析
- 传统的JDBC数据库连接试用DriverManager来获取,每次向数据库建立连接的时候都要将Connection加载到内存中,在验证ip地址,用户名和密码。需要数据库连接的时候。就向数据库要求一个,频繁的进行数据库连接操作将占用很多的系统资源,容易造成系统崩溃。
- 每一次数据库连接,使用完后都得断开,如果程序出现异常未能关闭,将导致数据库内存泄漏,最终将导致重启数据库。
- 传统获取连接的方式,不能控制创建连接的连接数量,如果连接过多,也能看导致内存泄漏,mysql崩溃。
- 解决传统开发中数据库连接问题,可以采用数据库连接池技术(connection pool)。
数据库连接池
数据库连接池基本介绍
- 预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需要从“缓冲池”中取出,使用完毕之后再放回去。
- 数据库连接池负责分配,管理和释放数据库连接,他允许应用程序重复试用一个现有的数据库连接,而不是新建立一个。
- 当应用程序向连接池请求的连接数量超过最大的连接数时,这些请求将被加入到等待队列中。
- JDBC数据库连接池试用java.sql.DataSource来表示,DataSource只是一个接口,该接口通常由第三方提供实现(提供.jar)
C3P0应用
package com.csy.datasource;
import com.mchange.v2.c3p0.ComboPooledDataSource;
import java.beans.PropertyVetoException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Properties;
public class C3P0Test {
public void testC3P0() throws IOException, PropertyVetoException, SQLException {
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
Properties properties = new Properties();
properties.load(new FileInputStream("D:\ideaworkspaces\JDBCStudy\src\mysql.properties"));
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
comboPooledDataSource.setDriverClass(driver);
comboPooledDataSource.setUser(user);
comboPooledDataSource.setPassword(password);
comboPooledDataSource.setJdbcUrl(url);
comboPooledDataSource.setInitialPoolSize(10);
comboPooledDataSource.setMaxPoolSize(50);
Connection connection = comboPooledDataSource.getConnection();
System.out.println("连接成功");
connection.close();
}
}