JDBC数据源: Data Source
JDBC中提供了javax.sql.DataSource接口,负责建立与数据库的连接
DataSource对象可以由Web服务器提供,前提是需要在服务器配置DataSource(包括连接池)
连接池:Connection Pool
将一些JDBC Connection对象,如水池般积蓄起来,在需要时之间可以直接从池中拿出使用,而不需即时创建
在原来连接数据库的方式中,
每次数据库访问(哪怕只有一条SQL)都要独立获取一个数据库连接进行操作,最后再关闭,可以想见,对于一些复杂的业务方法而言,可能要频繁的数据库连接
对于JDBC Driver来说,连接数据库并非一件轻松的差事:
1.创建一个Socket Connection
2.验证用户名/密码,权限
3.数据库处理会话,记录联机日志
4.分配相应的处理进程和系统资源
数据库连接池的基本原理是在内部对象池中维护一定数量的数据库连接,并对外暴露.每次使用只需从池中取走连接即可,不需要频繁的使用驱动管理。
连接池的基本原理
- 预先建立一些连接对象放置于内存
- 当程序需要建立数据库连接时,只须从内存中取一个来用,用完后只需放回内存即可
- 连接的建立、断开都有连接池自身来管理
- 可以设置连接池中的连接数、每个连接的最大使用次数等参数
我们先举例一个连接池来说明它的用法
Druid是阿里巴巴开源的一款连接池,我们先百度Druid maven下载jar包
之后,我们需要自己写一个工具类从连接池中获取连接
package tool;
import java.sql.Connection;
import java.sql.SQLException;
import com.alibaba.druid.pool.DruidDataSource;
public class DBSutil {
private static DruidDataSource dds; //声明连接池dds
static { //静态代码块用于设置连接池属性
dds = new DruidDataSource();
dds.setUrl("jdbc:mysql://主机名:端口名/数据库名");
dds.setUsername("用户名");
dds.setPassword("密码");
}
public static DruidDataSource getDBDS() {
return dds; //类成员方法返回连接池(免实例化)
}
public static Connection getDBConn() {
try {
return dds.getConnection(); //类成员方法返回连接(免实例化)
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}
这样,当我们需要使用连接的时候,调用上面的getDbConn方法获取连接即可