您的位置:首页 > 编程语言 > Java开发

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 开启不关闭,会出异常!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: