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

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. tasklet和workqueue的选择

    linux内核设计与实现page127中有个比較,内容比較多.概括一下就是1. tasklet不能休眠, 2. 不须要休眠tasklet效率更高 3.有休眠仅仅能workqueue (1)假设不须要休 ...

  2. hdu-1016素数环

    这个题就是给出一个数字n,表示有n个数.编号为1~n. 然后要求我们将这n个数连起来变成一个环,要求随意两个数相加所得值必须为素数. 假设满足条件就将这个环输出来! 这个题:dfs+回溯+推断.然后注 ...

  3. [linux]ubuntu14.04通过apt-get安装软件失败

    1.首先查看 dns 配置 sudo vi /etc/resolv.conf nameserver 114.114.114.114 nameserver 8.8.8.8 2.修改 apt-get 源 ...

  4. [置顶] think in java interview-高级开发人员面试宝典(七)

    上两周研发任务太紧了,所以担搁了一下,我们继续我们的面试之旅. 下面是一个基于图书系统的15道SQL问答,供大家参考 问题描述:本题用到下面三个关系表:CARD     借书卡.   CNO 卡号,N ...

  5. 10、ERP设计之系统基础管理(BS)- 平台化设计

    ShareERP 2013-09-03 ERP业务平台化是每个软件提供商必须要进行的趋势,传统定制化路线已死,不能走定制化的老路了.以往最大问的题是不能累积和沉淀技术及提升项目业务管理能力,其次是管理 ...

  6. warning: directory not found for option &#39; &#39;

    解决: 选择项目名称-->Targets-->Build Settings-->Search Paths-->Library Search Paths 删除相应路径

  7. Linux进程间通信(九)---综合实验之有名管道通信实验

    实验目的 通过编写有名管道多路通信实验,进一步掌握管道的创建.读写等操作,同时复习使用select()函数实现管道的通信. 实验内容 这里采用管道函数创建有名管道(不是在控制台下输入命令mknod), ...

  8. Java调用摄像头截图

    使用webcam-capture替换JMF调用摄像头 最近有个需要通过java调用摄像头,并截图的需求,在网上找了下资料,大部分是用一个叫jmf的库,但是jmf已经几百年没有更新,用起来各种问题.后来 ...

  9. Linux C语言写的超级简单port扫描器

    这个本来曾经也写过的,今天无聊复习下 再写一遍.简单的一塌糊涂,写的不咋地大家见谅哦!有空再加强 嘿嘿! #include <stdio.h> #include <stdlib.h& ...

  10. 循环多少次? 【杭电--HDOJ-1799】 附题+具体解释

    循环多少次? Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...