JDBC的一些笔记整理(2)
连接池(DataSource)的使用
/*
连接池用于缓存连接!
当我们需要使用连接时, 可以不用再创建连接 ! 可以直接从连接池中获取连接.
当连接池中存在空闲连接时, 会将空闲连接给到程序使用.
当连接池中不存在空闲连接时, 且连接池未满时 , 则创建连接提供给程序使用 ,
并在程序使用完毕后,缓存连接.
当连接池中不存在空闲连接时, 且连接池已满时 , 则排队等候空闲连接的出现.
注意:
使用连接池中的连接对象操作数据库时, 操作完毕依然需要释放连接(调用
close()).
连接池中的连接在设计时, 使用了动态代理设计模式+装饰者设计模式 . 我们
调用它的close方法,
代理没有关闭这个连接, 而是将连接重新放入了池中.
*/
DBCP连接池的使用步骤
- 引入相关的jar文件
- dbcp.jar
- poll.jar
- 将配置文件引入
- 将配置文件, 转换为Properties对象
Properties ppt = new Properties();
ppt.load(配置文件的输入流); - 通过连接池的工厂类(BasicDataSourceFactory)的创建连接池的方法(createDataSource())
DataSource ds = BasicDataSourceFactory.createDataSource(ppt); - 从连接池中 获取连接对象
Connection conn = ds.getConnection();
德鲁伊连接池的使用步骤
- 引入相关的jar文件
- druid-1.0.9.jar
- 将配置文件引入
- 将配置文件, 转换为Properties对象
Properties ppt = new Properties();
ppt.load(配置文件的输入流); - 通过连接池的工厂类(DruidDataSourceFactory)的创建连接池的方法(createDataSource())
DataSource ds = DruidDataSourceFactory.createDataSource(ppt); - 从连接池中 获取连接对象
Connection conn = ds.getConnection();
连接池工具类
Druid
public class DruidUtil{
private static DataSource data = null;
static {
InputStream is = DruidUtil.class.getClassLoader().getResourceAsStream("druid.properties");
Properties ppt = new Properties();
try {
ppt.load(is);
data = DruidDataSourceFactory.createDataSource(ppt);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 用于从DBCP连接池中 获取一个连接
* @return DBCP连接池中的一个连接对象.
*/
public static Connection getConnection() {
try {
return data.getConnection();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
/**
* 用于释放连接 , 执行环境 , 结果集 等资源
* @param conn 要释放的连接资源
* @param state 要释放的执行环境资源
* @param result 要释放的结果集资源
*/
public static void close(Connection conn,Statement state,ResultSet result) {
if(result != null) {
try {
result.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(state != null) {
try {
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn != null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}