java自己实现数据库连接池
2014-03-18 17:47
351 查看
一 新建一个 config.properties
url=jdbc\:mysql\://localhost/test
user=root
pwd=root
classfor=com.mysql.jdbc.Driver
poolsize=10
二 新建一个了类 数据库连接池类
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import java.util.Vector;
public class DemoConnnectionPool {
private static DemoConnnectionPool instance;
static Vector<Connection> connections;
static String url;
static String poolSize;
static String user;
static String pwd;
static String classFor;
private DemoConnnectionPool() {
}
public static DemoConnnectionPool getInstance() {
if (instance == null) {
instance = new DemoConnnectionPool();
readConfig();
init();
try {
Class.forName(classFor);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return instance;
}
/**
* 得到一个数据库链接
*
* @return
*/
public Connection getConnection() {
if (connections.size() > 0) {
Connection conn = connections.get(0);
connections.remove(conn);
return conn;
} else {
return null;
}
}
/**
* 释放连接池
* @param conn
*/
public void releaseConnection(Connection conn) {
connections.add(conn);
}
public static void readConfig() {
String path = "config.properties";
InputStream is = ClassLoader.getSystemResourceAsStream(path);
Properties pro = new Properties();
try {
pro.load(is);
user = pro.getProperty("user", "");
classFor = pro.getProperty("classfor", "");
poolSize = pro.getProperty("poolsize", "");
pwd = pro.getProperty("pwd", "");
url = pro.getProperty("url", "");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void init() {
int size = Integer.parseInt(poolSize);
connections = new Vector<Connection>(size);
for (int i = 0; i < size; i++) {
try {
Connection conn = DriverManager.getConnection(url, user, pwd);
connections.add(conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
三 新建一个调用类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DemoConnnectionTry {
public static void main(String[] args) {
DemoConnnectionPool pool = DemoConnnectionPool.getInstance();
System.out.println(pool.classFor);
System.out.println(pool.user);
System.out.println(pool.pwd);
System.out.println(pool.url);
System.out.println(pool.poolSize);
// 用连接池
long shijian = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
Connection conn = pool.getConnection();
Statement stmt = null;
try {
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from user");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pool.releaseConnection(conn);
}
}
System.out.println(System.currentTimeMillis() - shijian);
long shijian1 = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
Connection conn = null;
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost/test", "root", "root");
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Statement stmt = null;
try {
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from user");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pool.releaseConnection(conn);
}
}
System.out.println(System.currentTimeMillis() - shijian1);
}
}
发现用了连接池的时间明显低于 不用 连接池的时间,而且不用连接池的 connection 要关闭,不然太多connection 开启不关闭,会出异常!
url=jdbc\:mysql\://localhost/test
user=root
pwd=root
classfor=com.mysql.jdbc.Driver
poolsize=10
二 新建一个了类 数据库连接池类
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
import java.util.Vector;
public class DemoConnnectionPool {
private static DemoConnnectionPool instance;
static Vector<Connection> connections;
static String url;
static String poolSize;
static String user;
static String pwd;
static String classFor;
private DemoConnnectionPool() {
}
public static DemoConnnectionPool getInstance() {
if (instance == null) {
instance = new DemoConnnectionPool();
readConfig();
init();
try {
Class.forName(classFor);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return instance;
}
/**
* 得到一个数据库链接
*
* @return
*/
public Connection getConnection() {
if (connections.size() > 0) {
Connection conn = connections.get(0);
connections.remove(conn);
return conn;
} else {
return null;
}
}
/**
* 释放连接池
* @param conn
*/
public void releaseConnection(Connection conn) {
connections.add(conn);
}
public static void readConfig() {
String path = "config.properties";
InputStream is = ClassLoader.getSystemResourceAsStream(path);
Properties pro = new Properties();
try {
pro.load(is);
user = pro.getProperty("user", "");
classFor = pro.getProperty("classfor", "");
poolSize = pro.getProperty("poolsize", "");
pwd = pro.getProperty("pwd", "");
url = pro.getProperty("url", "");
} catch (IOException e) {
e.printStackTrace();
}
}
public static void init() {
int size = Integer.parseInt(poolSize);
connections = new Vector<Connection>(size);
for (int i = 0; i < size; i++) {
try {
Connection conn = DriverManager.getConnection(url, user, pwd);
connections.add(conn);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
三 新建一个调用类
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DemoConnnectionTry {
public static void main(String[] args) {
DemoConnnectionPool pool = DemoConnnectionPool.getInstance();
System.out.println(pool.classFor);
System.out.println(pool.user);
System.out.println(pool.pwd);
System.out.println(pool.url);
System.out.println(pool.poolSize);
// 用连接池
long shijian = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
Connection conn = pool.getConnection();
Statement stmt = null;
try {
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from user");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pool.releaseConnection(conn);
}
}
System.out.println(System.currentTimeMillis() - shijian);
long shijian1 = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {
Connection conn = null;
try {
conn = DriverManager.getConnection(
"jdbc:mysql://localhost/test", "root", "root");
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Statement stmt = null;
try {
stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from user");
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
stmt.close();
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
pool.releaseConnection(conn);
}
}
System.out.println(System.currentTimeMillis() - shijian1);
}
}
发现用了连接池的时间明显低于 不用 连接池的时间,而且不用连接池的 connection 要关闭,不然太多connection 开启不关闭,会出异常!
相关文章推荐
- java-面向对象之继承(感言:经过第一天和Java中类的继承和接口的实现的接触,自己需要学习的还很多,还要从基础抓起,尽管有点迷糊,但学到很多很喜欢这种时光!加油!)下面是查到的相关资料以备查看。
- Java基础:一种实现数据库连接池的方法
- Java 去除字符串两端空格(或其他符号) 自己实现trim()
- sparkstreaming直连kafka Java实现 自己管理offset
- Java jdbc数据库连接池完整实现R2的原理
- 顿悟JAVA,自己实现Object的Clone的约束关系(下)
- 使用 JAVA 中的动态代理实现数据库连接池
- java properties 的六种读取方法 以及一种自己最方便的实现
- 自己写个servlet,想集成到别人原有的项目中,实现自己想要的功能(比如我想写个ajax的功能,把这个servletAjax.java的类编译成.class文件)
- 自己实现一个数据库连接池
- 自己实现一个数据库连接池
- java 自己实现的简单Map
- 自己实现一个数据库连接池
- JAVA自己实现的文件压缩解压
- 2018-07-24期 Java动态代理实现数据库连接池
- 自己参考jdk和hashSet写的hashTable(JAVA实现)
- 用java代码实现一个自己的栈.
- 使用JAVA中的动态代理实现数据库连接池
- java实现单项链表(复制,自己总结的在下一篇)
- Java容器—— 「通过数组实现自己的ArrayMap」