当前位置: 技术问答>java相关
怎样使用连接池?
来源: 互联网 发布时间:2015-05-28
本文导语: 现在是用jsp作了个web形式的操作界面,但是怕今后操作终端增加很多后会干扰主业务对数据库的操作(用的是sybase12),想使用连接池,因为我是jsp新手,所以很想找点具体资料,大家有什么好推荐的,恳请指点。我...
现在是用jsp作了个web形式的操作界面,但是怕今后操作终端增加很多后会干扰主业务对数据库的操作(用的是sybase12),想使用连接池,因为我是jsp新手,所以很想找点具体资料,大家有什么好推荐的,恳请指点。我用的是jrun3.0,里面的jdbc连接有个pool选项,是什么作用,是jrun自己的连接池么?
|
标题 JDBC Connection Pool Example skyyoung(收藏)
关键字 Connection Pool
/*
* Copyright (c) 1998 by Gefion software.
*
* Permission to use, copy, and distribute this software for
* NON-COMMERCIAL purposes and without fee is hereby granted
* provided that this copyright notice appears in all copies.
*
*/
import java.io.*;
import java.sql.*;
import java.util.*;
import java.util.Date;
/**
* This class is a Singleton that provides access to one or many
* connection pools defined in a Property file. A client gets
* access to the single instance through the static getInstance()
* method and can then check-out and check-in connections from a pool.
* When the client shuts down it should call the release() method
* to close all open connections and do other clean up.
*/
public class DBConnectionManager {
static private DBConnectionManager instance; // The single instance
static private int clients;
private Vector drivers = new Vector();
private PrintWriter log;
private Hashtable pools = new Hashtable();
/**
* Returns the single instance, creating one if it's the
* first time this method is called.
*
* @return DBConnectionManager The single instance.
*/
static synchronized public DBConnectionManager getInstance() {
if (instance == null) {
instance = new DBConnectionManager();
}
clients++;
return instance;
}
/**
* A private constructor since this is a Singleton
*/
private DBConnectionManager() {
init();
}
/**
* Returns a connection to the named pool.
*
* @param name The pool name as defined in the properties file
* @param con The Connection
*/
public void freeConnection(String name, Connection con) {
DBConnectionPool pool = (DBConnectionPool) pools.get(name);
if (pool != null) {
pool.freeConnection(con);
}
}
/**
* Returns an open connection. If no one is available, and the max
* number of connections has not been reached, a new connection is
* created.
*
* @param name The pool name as defined in the properties file
* @return Connection The connection or null
*/
public java.sql.Connection getConnection(String name) {
DBConnectionPool pool = (DBConnectionPool) pools.get(name);
if (pool != null) {
return pool.getConnection();
}
return null;
}
/**
* Returns an open connection. If no one is available, and the max
* number of connections has not been reached, a new connection is
* created. If the max number has been reached, waits until one
* is available or the specified time has elapsed.
*
* @param name The pool name as defined in the properties file
* @param time The number of milliseconds to wait
* @return Connection The connection or null
*/
public java.sql.Connection getConnection(String name, long time) {
DBConnectionPool pool = (DBConnectionPool) pools.get(name);
if (pool != null) {
return pool.getConnection(time);
}
return null;
}
/**
* Closes all open connections and deregisters all drivers.
*/
public synchronized void release() {
// Wait until called by the last client
if (--clients != 0) {
return;
}
Enumeration allPools = pools.elements();
while (allPools.hasMoreElements()) {
DBConnectionPool pool = (DBConnectionPool) allPools.nextElement();
pool.release();
}
Enumeration allDrivers = drivers.elements();
while (allDrivers.hasMoreElements()) {
Driver driver = (Driver) allDrivers.nextElement();
try {
DriverManager.deregisterDriver(driver);
log("Deregistered JDBC driver " + driver.getClass().getName());
}
catch (SQLException e) {
log(e, "Can't deregister JDBC driver: " + driver.getClass().getName());
}
}
}
|
这个连接池还真是一般般