java自己实现数据库连接池

来源:互联网 发布:金蝶软件数据库 编辑:程序博客网 时间:2024/06/01 13:37

一  新建一个 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 开启不关闭,会出异常!



0 0
原创粉丝点击