普通得连接池就可以啊,不一定非要配jrun的,给你一个我们以前项目用的例子,在jrun下跑的很好的。---DBConnPool.java---
package db;import java.sql.*;
import java.util.*;/*连接池类.能够根据要求创建新连接,直到最大连接数为止.*/
public class DBConnPool {
//实际使用中的连接数
private int inUse=0;
//空闲连接
private Vector connections = new Vector();
//连接池名
private String poolname;
//数据库标识
private String dbid;
//驱动程序名
private String drivername;
//数据库账号
private String username;
//数据库密码
private String passwd;
//最大连接数
private int maxconn; public DBConnPool(String poolname, String drivername, String dbid, String username, String passwd, int maxconn) {
this.poolname = poolname;
this.dbid = dbid;
this.drivername = drivername;
this.username = username;
this.passwd = passwd;
this.maxconn = maxconn;
} /*将连接返回给连接池*/
public synchronized void releaseConnection(Connection con) {
// 将指定连接加入到向量末尾
connections.addElement(con);
//连接数减一
inUse--;
} /*从连接池得到一个连接*/
public synchronized Connection getConnection() {
Connection con = null;
if (connections.size() > 0) {
// 获取连接列表中获得第一个连接
con = (Connection) connections.elementAt(0);
connections.removeElementAt(0);
//如果此连接已关闭,则继续获取
try {
if (con.isClosed())
con = getConnection();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
//如果实际使用的连接小于最大连接数,就新创建一个连接
else if (maxconn == 0 || inUse < maxconn) {
con = newConnection();
}
if (con != null) {
//连接数增一
inUse++;
}
//返回一个连接
return con;
} /*创建新的连接*/
private Connection newConnection() {
Connection con = null;
try {
//加载驱动程序
Class.forName(drivername);
//建立连接
con = DriverManager.getConnection(dbid, username, passwd);
}
catch (Exception e) {
e.printStackTrace();
return null;
}
//返回该连接
return con;
} /*关闭所有连接*/
public synchronized void closeConn() {
Enumeration allConnections = connections.elements();
while (allConnections.hasMoreElements()) {
Connection con = (Connection) allConnections.nextElement();
try {
con.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
connections.removeAllElements();
}
}
package db;import java.sql.*;
import java.util.*;/*连接池类.能够根据要求创建新连接,直到最大连接数为止.*/
public class DBConnPool {
//实际使用中的连接数
private int inUse=0;
//空闲连接
private Vector connections = new Vector();
//连接池名
private String poolname;
//数据库标识
private String dbid;
//驱动程序名
private String drivername;
//数据库账号
private String username;
//数据库密码
private String passwd;
//最大连接数
private int maxconn; public DBConnPool(String poolname, String drivername, String dbid, String username, String passwd, int maxconn) {
this.poolname = poolname;
this.dbid = dbid;
this.drivername = drivername;
this.username = username;
this.passwd = passwd;
this.maxconn = maxconn;
} /*将连接返回给连接池*/
public synchronized void releaseConnection(Connection con) {
// 将指定连接加入到向量末尾
connections.addElement(con);
//连接数减一
inUse--;
} /*从连接池得到一个连接*/
public synchronized Connection getConnection() {
Connection con = null;
if (connections.size() > 0) {
// 获取连接列表中获得第一个连接
con = (Connection) connections.elementAt(0);
connections.removeElementAt(0);
//如果此连接已关闭,则继续获取
try {
if (con.isClosed())
con = getConnection();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
//如果实际使用的连接小于最大连接数,就新创建一个连接
else if (maxconn == 0 || inUse < maxconn) {
con = newConnection();
}
if (con != null) {
//连接数增一
inUse++;
}
//返回一个连接
return con;
} /*创建新的连接*/
private Connection newConnection() {
Connection con = null;
try {
//加载驱动程序
Class.forName(drivername);
//建立连接
con = DriverManager.getConnection(dbid, username, passwd);
}
catch (Exception e) {
e.printStackTrace();
return null;
}
//返回该连接
return con;
} /*关闭所有连接*/
public synchronized void closeConn() {
Enumeration allConnections = connections.elements();
while (allConnections.hasMoreElements()) {
Connection con = (Connection) allConnections.nextElement();
try {
con.close();
}
catch (SQLException e) {
e.printStackTrace();
}
}
connections.removeAllElements();
}
}
解决方案 »
- 请问控制同一台机器只能投票一次有什么好的解决方案吗
- 我有一段EXT的COMBO,现在保存不了值,请问怎么解决,详细代码如下:
- 为什么进行update操作时却添加了一条同样的记录
- 表名帶空格怎麼處理?
- 在 InterBase 的IBConsole里边用Crerat DataBase新建一个名称为d:\database\student.gdb的数据库时,为什么会出错呢?求教!
- 各位大虾,小弟刚学Java不久,不知道为什么写的jsp程序调用class的方法没有反应???请多多指教。。。
- 项目持久层想用hibernate,有一点担心,想请教大家
- 通过web上传文件,在服务器端如何控制文件的大小?
- 如何从数据库中随机抽取10个记录?
- com与javabean
- 求一个从*.properties文件读取数据的javabean
- 在包含页的方法中能不能嵌入 html
import java.util.*;/*连接池管理类,可以管理多个数据库连接池*/
public class DBConnManager {
//连接池名列表
private Vector poolnames = new Vector();
//驱动程序名列表
private Vector drivernames = new Vector();
//数据库标识列表
private Vector dbids = new Vector();
//用户名列表
private Vector usernames = new Vector();
//密码列表
private Vector passwds = new Vector();
//最大连接数列表
private Vector maxconns = new Vector();
//连接池队列
private Hashtable connPools = new Hashtable();
public DBConnManager() {
//添加scjp数据库的连接信息
poolnames.addElement("scjp");
drivernames.addElement("oracle.jdbc.driver.OracleDriver");
dbids.addElement("jdbc:oracle:thin:@192.168.168.13:1521:scjp");
usernames.addElement("scjp");
passwds.addElement("scjp");
maxconns.addElement("15");
//添加test数据库的连接信息
poolnames.addElement("test");
drivernames.addElement("oracle.jdbc.driver.OracleDriver");
dbids.addElement("jdbc:oracle:thin:@192.168.168.13:1521:test");
usernames.addElement("test");
passwds.addElement("test");
maxconns.addElement("15");
//创建连接池
createPools();
}
/*将连接返回给由指定的连接池*/
public void releaseConnection(String name, Connection con) {
DBConnPool pool = (DBConnPool) connPools.get(name);
if (pool != null)
pool.releaseConnection(con);
}
/*得到一个指定连接池中的连接*/
public Connection getConnection(String name) {
DBConnPool pool = (DBConnPool) connPools.get(name);
if (pool != null)
return pool.getConnection();
return null;
}
/*关闭所有连接*/
public synchronized void closeConns() {
Enumeration allPools = connPools.elements();
while (allPools.hasMoreElements()) {
DBConnPool pool = (DBConnPool) allPools.nextElement();
pool.closeConn();
}
}
/*创建连接池*/
private void createPools() {
for(int i = 0; i<poolnames.size();i++){
String poolname = poolnames.elementAt(i).toString();
String drivername = drivernames.elementAt(i).toString();
String dbid = dbids.elementAt(i).toString();
String username = usernames.elementAt(i).toString();
String passwd = passwds.elementAt(i).toString();
int maxconn=0;
try {
maxconn = Integer.parseInt(maxconns.elementAt(i).toString());
}
catch (NumberFormatException e) {
e.printStackTrace();
}
DBConnPool pool = new DBConnPool(poolname, drivername, dbid, username, passwd, maxconn);
connPools.put(poolname, pool);
}
}
}
不过因为我现在用websphere+db2,手头没有这个环境,很具体的就无法解答你了。
详细oracle连接方式,我想你去数据库/oracle版问一下会比较好,那边很多高手的。
<jsp:useBean id="connManager" scope="session" class="db.DBConnManager" />
<%
Connection con = connManager.getConnection("scjp");
if(con==null)
{
%>对不起,现在数据库忙,请稍后再试<%
}
Statement stmt = con.createStatement();
%>scjp是你设定的连接库的名字
//添加scjp数据库的连接信息
poolnames.addElement("scjp");
drivernames.addElement("oracle.jdbc.driver.OracleDriver");
dbids.addElement("jdbc:oracle:thin:@192.168.168.13:1521:scjp");
usernames.addElement("scjp");
passwds.addElement("scjp");
maxconns.addElement("15");
就是这个第一行的名字。关闭数据库连接用
<%
stmt.close();
connManager.releaseConnection("scjp",con);
%>呵呵,7楼的用不着骂人,做项目遇到问题谁都急的。
我想他是跪习惯了,你帮他做好了,
那就就在一旁看他**了。做人要有骨气!!
package apps;import java.sql.*;
import java.util.*;
import java.lang.*;/*连接池管理类,可以管理多个数据库连接池*/
public class DBConnManager {
//连接池名列表
protected String poolnames;
private Hashtable connPools = new Hashtable(); public DBConnManager() {
//添加scjp数据库的连接信息
poolnames="online";
//创建连接池
createPools();
}
/*将连接返回给由指定的连接池*/
public void releaseConnection(String name,Connection con) {
DBConnManager pool = (DBConnManager) connPools.get(name);
if (pool != null)
pool.releaseConnection(name,con);
}
/*得到一个指定连接池中的连接*/
public Connection getConnection(String name) {
DBConnManager pool = (DBConnManager) connPools.get(name);
return pool.getConnection(name);
}
/*关闭所有连接*/
public synchronized void closeConns() {
Enumeration allPools = connPools.elements();
while (allPools.hasMoreElements()) {
DBConnManager pool = (DBConnManager) allPools.nextElement();
pool.closeConns();
}
}
/*创建连接池*/
private void createPools() {
DBConnManager pool = new DBConnManager();
connPools.put(poolnames, pool);
}
}
{
Connection dbConnection = null;
try
{
InitialContext ctx = new InitialContext();
DataSource ds = (DataSource) ctx.lookup(jdbcName);
dbConnection = ds.getConnection();
}
catch(Exception e)
{ }
try
{
if (dbConnection.isClosed() && intCnt < 3)
{
intCnt++;
dbConnection = getConn(jdbcName, intCnt); }
}
catch (SQLException e)
{
intCnt++;
dbConnection = getConn(jdbcName, intCnt);
}
return dbConnection;
}
public static Connection getConn(String jdbcName) throws Exception
{
return getConn(jdbcName, 0);
}public static void clear()
{
try
{
if (conn != null) { conn.close();}
}
catch (SQLException e)
{ }
}