实现一个简单的数据库连接池

1,连接池接口

package dbsource;

import java.sql.Connection;
import java.sql.SQLException; /**
* 连接池接口
* @author lxz
*
*/
public interface DBSource { Connection getConnection() throws SQLException; void closeConnection(Connection con) throws SQLException;
}

2,连接池实现

package dbsource;

import java.io.FileInputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties; public class BasicDBSource implements DBSource { private final static String URL = "url";
private final static String PASSWORD = "password";
private final static String USER = "user";
private final static String POOLMAX = "poolmax";
private final static String DRIVER = "driver";
private final static String INIT = "init";
private final static String DEFAULT_PRO = "myjdbc.properties"; private Properties pro = new Properties();// 属性文件对象
private String url;// 地址
private String user;// 数据库用户名
private String password;// 数据库密码
private int max;// 最大连接数
private int init;//初始化连接池
private List<Connection> connections;// 数据连接集合 public BasicDBSource(String configFile) throws IOException,
ClassNotFoundException {
pro.load(new FileInputStream(configFile));
url = pro.getProperty(URL);
user = pro.getProperty(USER);
password = pro.getProperty(PASSWORD);
max = Integer.parseInt(pro.getProperty(POOLMAX));
init = Integer.parseInt(pro.getProperty(INIT));
Class.forName(pro.getProperty(DRIVER));
connections = new ArrayList<Connection>();
for(int i=0;i<init;i++){
try {
connections.add(DriverManager.getConnection(url,user,password));
} catch (SQLException e) {
//数据库连接失败
}
}
} public BasicDBSource() throws ClassNotFoundException, IOException{
this(DEFAULT_PRO);
} public Connection getConnection() throws SQLException {
if(connections.size()==0){
return DriverManager.getConnection(url,user,password);
}else{
int last = connections.size()-1;
return connections.remove(last);
}
} public void closeConnection(Connection con) throws SQLException {
if(connections.size()>=max){
con.close();
}else{
connections.add(con);
}
} }

3,配置文件

url=数据库地址
password=密码
user=用户名
poolmax=最大连接数
driver=数据库驱动
init=初始化连接数

4,测试

package source;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException; import dbsource.BasicDBSource;
import dbsource.DBSource; public class MainTest { public static void main(String[] args) {
try {
DBSource dbsource = new BasicDBSource("myjdbc.properties");
Connection con1 = dbsource.getConnection();
System.out.println("第一次获取的数据库连接对象地址:"+con1);
dbsource.closeConnection(con1);
Connection con2 = dbsource.getConnection();
System.out.println("第二次获取的数据库连接对象地址:"+con2);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
} }

自定义DB连接池实现的更多相关文章

  1. java通过代理创建Conncection对象与自定义JDBC连接池

    最近学习了一下代理发现,代理其实一个蛮有用的,主要是用在动态的实现接口中的某一个方法而不去继承这个接口所用的一种技巧,首先是自定义的一个连接池 代码如下 import java.lang.reflec ...

  2. JavaWeb之数据源连接池(4)---自定义数据源连接池

    [续上文<JavaWeb之数据源连接池(3)---Tomcat>] 我们已经 了解了DBCP,C3P0,以及Tomcat内置的数据源连接池,那么,这些数据源连接池是如何实现的呢?为了究其原 ...

  3. 利用python list 完成最简单的DB连接池

    先来看查看效果: 在代码连接数据库后,并且执行三条sql后,将mysql直接重启掉,故我们的连接池连接均是不ok的,所以,它会全部删除再抓新的连接下来,重启mysql命令: 关于python代码: # ...

  4. Java 自定义FTP连接池

    转自:https://blog.csdn.net/eakom/article/details/79038590 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn ...

  5. JDBC数据源连接池(4)---自定义数据源连接池

    [续上文<JDBC数据源连接池(3)---Tomcat集成DBCP>] 我们已经 了解了DBCP,C3P0,以及Tomcat内置的数据源连接池,那么,这些数据源连接池是如何实现的呢?为了究 ...

  6. db连接池

    目前常用的连接池有: DBCP:org.apache.commons.dbcp.BasicDataSource dataSource: 要连接的 datasource (通常我们不会定义在 serve ...

  7. 自定义redis连接池(字典操作)

    pool=redis.ConnectionPool(host='127.0.0.1', port=6379,max_connections=1000)conn=redis.Redis(connecti ...

  8. JAVA自定义连接池原理设计(一)

    一,概述 本人认为在开发过程中,需要挑战更高的阶段和更优的代码,虽然在真正开发工作中,代码质量和按时交付项目功能相比总是无足轻重.但是个人认为开发是一条任重而道远的路.现在本人在网上找到一个自定义连接 ...

  9. SpringBoot 整合mongoDB并自定义连接池

    SpringBoot 整合mongoDB并自定义连接池 得力于SpringBoot的特性,整合mongoDB是很容易的,我们整合mongoDB的目的就是想用它给我们提供的mongoTemplate,它 ...

随机推荐

  1. python基础教程_学习笔记10:异常

    异常 什么是异常 Python用异常对象来表示异常情况.遇到错误后,会引发异常.假设异常对象并未被处理或捕捉,程序就会用所谓的回溯(Traceback,一种错误信息)终止运行: >>> ...

  2. Andorid Clip 实现自定义的进度条效果实例

    Android该系统提供了一个水平进度条为我们展现了运行使用进展情况,水平进度条显示用于运行进度Clip Drawable技术 下面我们通过一个具体的例子来说明Clip Drawable使用. 还有我 ...

  3. Git详解之六 Git工具(转)

    Git 工具 现在,你已经学习了管理或者维护 Git 仓库,实现代码控制所需的大多数日常命令和工作流程.你已经完成了跟踪和提交文件的基本任务,并且发挥了暂存区和轻量级的特性分支及合并的威力. 接下来你 ...

  4. Xsoup 是一款基于 Jsoup 开发的

    Xsoup 是一款基于Jsoup 开发的,使用XPath抽取Html元素的工具.它被用于作者的爬虫框架 WebMagic 中,进行XPath 解析和抽取. 此次更新主要增加了一些XPath语法的支持. ...

  5. hdu1428之dfs+spfa

    漫步校园 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. storm-编程入门

    一 编程接口                                           watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhhbm ...

  7. Java的byte数组

    今天我们讨论一下Java的byte数组.byte数组就是字节数组,每一位存一个字节.看下面程序,猜猜输出多少? package com.wjy.bytes; import java.io.File; ...

  8. NAT ALG原理

    1      NAT ALG简介 普通NAT实现了对UDP或TCP报文头中的的IP地址及端口转换功能,但对应用层数据载荷中的字段无能为力,在许多应用层协议中,比如多媒体协议(H.323.SIP等).F ...

  9. hdu2089(数位dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题意:求区间[a,b]内不含有62或4的数的个数. 分析:数位dp,dp[pos][0]表示到第 ...

  10. Android四个多线程分析:MessageQueue实现

    Android四个多线程分析:MessageQueue的实现 罗朝辉 (http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 在前面两篇文章<Android多线 ...