DBCP开源数据库连接池的编写源码
来源:互联网 发布:网络的缺点有哪些 编辑:程序博客网 时间:2024/05/18 17:58
DBCP开源数据库连接池的编写源码
一 思路分析
1. 使用数据库连接池的作用
如果没有数据库连接池,那么用户每次请求都需要向数据库获取连接,而数据库创建连接通常消耗相对较大的资源,创建时间也较长,可以造成内存溢出,所以就有了数据库连接池,为了避免总是访问数据库,因为数据库是很宝贵的资源。
2.编写的思路
因为在每次访问数据库进行数据的增删改查的时候,都有相同的代码,所以把相同的代码提取出来,放到一个键值对的properties的文档中,通过反射的机制获取到文档的内容并加载到Porperty这样一个永久的属性类中,在资源的时候其实并没有真的的关闭,而是把数据放到数据库连接池中。
3.实现的类
实现java.sql.DataSource接口,接口中的方法getConnection()
4.实现的步骤:
(1)在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加入LinkedList对象中。
(2)实现getConnection方法,让getConnection方法每次调用时,从LinkedList中取一个Connection返回给用户。
(3)当用户使用完Connection,调用Connection.close()方法时,Collection对象应保证将自己返回到LinkedList中,而不要把conn还给数据库。
(4)Collection保证将自己返回到LinkedList中是此处编程的难点。
注:在接口构造函数中批量创建于数据库的连接,并把创建的连接加入到ListedList中,LinkedList在插入删除元素时对其他元素的影响很少,是链式的连接,而不是使用ArrayList
二 代码分析
1.连接的实现
public class DBManager {
// 第一步:静态初始化块,加载配置文件
private static DataSource ds = null;
static {
// 获取proerties中的信息
InputStream is = DBManager.class.getClassLoader().getResourceAsStream("db.properties";
// Properties 类表示了一个持久的属性集。
Properties p = new Properties();
try {
// 从输入流中读取属性列表(键和元素对)。
p.load(is);
ds = BasicDataSourceFactory.createDataSource(p);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection() {
Connection con = null;
try {
con = ds.getConnection();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return con;
}
// 是把资源归还到连接池中
public static void release(Connection con, PreparedStatement st,
ResultSet rs) {
if (rs != null) {
try {
rs.close();
} catch (Exception e) {
e.printStackTrace();
}
rs = null;
}
if (con != null) {
try {
con.close();
} catch (Exception e) {
e.printStackTrace();
}
con = null;
}
if (st != null) {
try {
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2.测试
public static void main(String[] args) {
Connection con =null;
PreparedStatement st = null;
ResultSet rs = null;
con = DBManager.getConnection();
String sql="insert into t values(?)";
try {
st = con.prepareStatement(sql);
st.setInt(1, 100);
int n = st.executeUpdate();
if(n>0){
System.out.println("插入成功");
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
DBManager.release(con, st, rs);
}
}
- DBCP开源数据库连接池的编写源码
- DBCP开源数据库连接池的编写源码
- DBCP开源数据库连接池的编写源码
- C3P0开源数据库连接池的编写源码
- C3P0开源数据库连接池的编写源码
- C3P0开源数据库连接池的编写源码
- 开源数据库连接池C3P0,DBCP的使用
- 开源数据库连接池(dbcp实例)
- dbcp数据库连接池的使用
- DBCP数据库连接池的使用
- DBCP数据库连接池的使用
- dbcp数据库连接池的配置
- DBCP数据库连接池的配置
- DBCP数据库连接池的使用
- 数据库连接池(数据源)2: 开源数据源的使用DBCP和C3P0
- mysql笔记八——开源数据库连接池DBCP和C3P0的使用
- apache dbcp数据库连接池的使用
- dbcp的简单使用_数据库连接池
- FCKEditor在线编辑器的使用
- Apache ---- DBUilts框架源码
- Apache----DBUtils框架
- C3P0开源数据库连接池的编写源码
- 上传文件中应当注意的细节
- DBCP开源数据库连接池的编写源码
- Smarty案例
- 合作开发小结
- Jndi技术----与数据库的连接(tomcat)
- Android ViewFlipper within TabHost for Tabs with different Views ... and better memory footprint
- myeclipse包资源管理器展示问题
- 使用元数据简化jdbc代码---查询操作(用到反射)
- 使用元数据简化jdbc代码
- 基本数据库并发操作