数据库连接池概念:其实就是一个容器(集合),存放数据库连接的容器,当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完毕之后,会将连接对象归还给容器
好处:1、节约资源 2、用户访问高效
DataSource 来自jdk帮助文档
-
一个连接到这个
DataSource
对象所代表的物理数据源的工厂。 对于DriverManager
设备的替代方案,DataSource
对象是获取连接的首选方法。 实现DataSource
接口的对象通常将基于Java“命名和目录(JNDI)API”的命名服务进行注册。DataSource
接口由驱动程序供应商实现。 有三种类型的实现:- 基本实现 - 生成标准的
Connection
对象 - 连接池实现 - 生成将自动参与连接池的
Connection
对象。 此实现与中间层连接池管理器配合使用。 - 分布式事务实现 - 生成可用于分布式事务的
Connection
对象,并且几乎总是参与连接池。 此实现与中间层事务管理器一起工作,并且几乎总是使用连接池管理器。
一个
DataSource
对象具有必要时可以修改的属性。 例如,如果将数据源移动到其他服务器,则可以更改服务器的属性。 好处是因为可以更改数据源的属性,所以不需要更改访问该数据源的任何代码。通过
DataSource
对象访问的驱动程序不会自动注册DriverManager
。 相反,通过查找操作检索DataSource
对象,然后用于创建一个Connection
对象。 通过基本实现,通过DataSource
对象获得的连接与通过DriverManager
工具获得的连接相同。DataSource
的实现必须包含一个public no-arg构造函数。 - 基本实现 - 生成标准的
实现: 标准接口:DataSource javax.sql包下 方法获取连接:getConnection()
归还连接:Connection.close() 如果连接对象Connection是从连接池中获取的,那么调用Connection.close()方法则不会再关闭连接了,而是归还连接
一般来说我们不去实现它,由数据库厂商来实现 有C3P0:数据库连接池技术和Druid:数据库连接池技术 由阿里巴巴提供
C3P0:数据库连接池技术 步骤:1、导入jar包两个()c3p0-0.9.5.2.jar mchange-commons-java-o.2.12.jar
2、定义配置文件:名称c3p0.properties or c3p0-config.xml路径:直接将文件放在src目录下即可
3、创建核心对象 数据库连接池对象:DataSource ds=new CombopoolceDataSource()
4、获取连接:getConnection()
Druid:数据库连接池技术 由阿里巴巴提供 步骤1、导入jar包 druid-1.o.9.jar
2、定义配置文件:是properties形式的 可以叫任意名称,可以放在任意目录下
3、加载配置文件 Properties
4、获取数据库连接池对象:通过工厂来获取 DruidDataSourceFactory
5、获取连接:getConnection()
Druid数据库连接池的工具类
1、定义成员变量 DataSource
private static DataSource ds;
static{
try{
Properties pro=new Properties();
pro.load("类名".class.getClassLoader().getResourceAsStream("druid.properties"));
ds=DruidDataSourceFactory.createDataSource(pro);
}catch(Exception e){
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException {
return ds.getConnection();
}
public static void close(Statement stmt, Connection conn) {
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static void close(ResultSet rs, Statement stmt, Connection conn) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
public static DataSource getDataSource(){
return ds;
}