当前位置:首页 » 操作系统 » 数据库连接池代码

数据库连接池代码

发布时间: 2022-09-22 08:29:04

1. 谁能给我发一段完整的数据库连接池代码

数据库连接是最常用的提高性能的方法,总结了一下:1 定义数据库访问接口public interface IDatabaseConnection
{
public abstract Connection createConnection();
public abstract void closeConnection(Connection conn);
}2 实现该接口2.1 直接连接,连接速度较慢,用户量较大时资源占用很大public Connection createConnection()
{
try
{
SystemParameter SP = new SystemParameter();
Class.forName(DBDRIVER).newInstance();
Connection con =
DriverManager.getConnection(
DBDRIVER_URL,
DBUSER,
DBPASSWORD);
return con;
}
catch (ClassNotFoundException e)
{
e.printStackTrace();
return null;
}
catch (sqlException e)
{ e.printStackTrace();
return null;
}
catch (InstantiationException e)
{ e.printStackTrace();
return null;
}
catch (IllegalAccessException e)
{ e.printStackTrace();
return null;
}
}
public void closeConnection(Connection conn)
{
if(conn!=null) try
{
conn.close();
}
catch (SQLException e)
{

e.printStackTrace();
} }2.2 DBConnectionManager、DBConnectionPool方式这个连接池是网上比较多的连接池代码public class DBConnectionManager
{
static private DBConnectionManager instance; /*唯一实例*/
static private int clients;
/*该计数代表引用DBConnectionManager唯一实例的客户程序总数,
它将被用于控制连接池的关闭操作 */
//Added by leo on 2001-5-23
static private String DEFAULTCONNECTIONPOOL = "homepage"; private Vector drivers = new Vector();
private PrintWriter logPrint;
private Hashtable pools = new Hashtable();
private SystemParameter sp = new SystemParameter();
/**
返回唯一实例。如果是第一次调用此方法,则创建实例
*/
static synchronized public DBConnectionManager getInstance()
{
if (instance == null)
{
instance = new DBConnectionManager();
}
clients++;
return instance;
} /**
建构函数私有以防止其它对象创建本类实例
*/
public DBConnectionManager()
{
init();
} /** Added by leo on 2001-5-23
使用默认的连接池名,创建并返回新连接
*
* @return Connection 可用连接或null
*/
public Connection getConnection()
{
return getConnection(DEFAULTCONNECTIONPOOL);
} /**
获得一个可用的(空闲的)连接.如果没有可用连接,且已有连接数小于最大连接数
限制,则创建并返回新连接
*
* @param name 在属性文件中定义的连接池名字
* @return Connection 可用连接或null
*/
public Connection getConnection(String name)
{
DBConnectionPool pool = (DBConnectionPool) pools.get(name);
if (pool != null)
{
return pool.getConnection();
}
return null;
} /**
获得一个可用连接.若没有可用连接,且已有连接数小于最大连接数限制,
则创建并返回新连接.否则,在指定的时间内等待其它线程释放连接.
*
* @param name 连接池名字
* @param time 以毫秒计的等待时间
* @return Connection 可用连接或null
*/
public Connection getConnection(String name, long time)
{
DBConnectionPool pool = (DBConnectionPool) pools.get(name);
if (pool != null)
{
return pool.getConnection(time);
}
return null;
} /** Added by leo on 2001-5-23
将连接对象返回给默认的连接池
*
* @param con 连接对象
*/
public void freeConnection(Connection con)
{
String name = DEFAULTCONNECTIONPOOL;
freeConnection(name, con);
} /**
将连接对象返回给由名字指定的连接池
*
* @param name 在属性文件中定义的连接池名字
* @param con 连接对象
*/
public void freeConnection(String name, Connection con)
{
DBConnectionPool pool = (DBConnectionPool) pools.get(name);
if (pool != null)
{
pool.freeConnection(con);
}
} /**
关闭所有连接,撤销驱动程序的注册
*/
public synchronized void release()
{ // 等待直到最后一个客户程序调用
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("撤消JDBC驱动程序" + driver.getClass().getName() + "的注册");
}
catch (SQLException e)
{
log(e, "无法撤消下列JDBC驱动程序的注册" + driver.getClass().getName());
}
}
} /**
根据指定属性创建连接池实例.
*
* @param props 连接池属性
*/
private void createPools()
{

String poolName = sp.DBPOOLNAME;
String url = sp.DBDRIVER_URL;
String user = sp.DBUSER;
String password = sp.DBPASSWORD;
int max = sp.DBMAXCONN;

DBConnectionPool pool =
new DBConnectionPool(poolName, url, user, password, max);
pools.put(poolName, pool);
log("成功创建连接池" + poolName); } /**
读取属性完成初始化
*/
private void init()
{ logPrint=new PrintWriter(System.out);
loadDrivers();
createPools();
} /**
装载和注册所有JDBC驱动程序
*
* @param props 属性
*/
private void loadDrivers()
{

String driverClassName = sp.DBDRIVER;
try
{
Driver driver =
(Driver) Class.forName(driverClassName).newInstance();
DriverManager.registerDriver(driver);
drivers.addElement(driver);
log("成功JDBC注册驱动程序" + driverClassName);
}
catch (Exception e)
{
log("无法注册JDBC驱动程序;" + driverClassName + ",错误:" + e);
}

} /**
将文本信息写入日志文件
缺省为packaged
*/
void log(String msg)
{
logPrint.println(new java.util.Date() + ": " + msg);
} /**
将文本信息与异常写入日志文件
*/
void log(Throwable e, String msg)
{
logPrint.println(new java.util.Date() + ": " + msg);
e.printStackTrace(logPrint);
}}------------------------------------------------------class DBConnectionPool
{
private int checkedOut;
private PrintWriter logPrint;
private Vector freeConnections = new Vector();
private int maxConn;
private String name;
private String password;
private String URL;
private String user; /**
创建新的连接池
*@param name 连接池名字
*@param URL 数据库的JDBC URL
*@param user 数据库帐号,或null
*@param password 密码,或null
*@param maxConn 此连接池允许建立的最大连接数
*/
public DBConnectionPool(String name, String URL, String user, String password, int maxConn)
{
this.name = name;
this.URL = URL;
this.user = user;
this.password = password;
this.maxConn = maxConn;
logPrint = new PrintWriter(System.out);

} /**
将不再使用的连接返回给连接池
*@param con 客户程序释放的连接
*/
public synchronized void freeConnection(Connection con)
{
freeConnections.addElement(con);
checkedOut--;
notifyAll();
} /**
从连接池获得一个可用连接,如没有空闲的连接且当前连接数小于最大连接数,则创建新连接,
如原来登记为可用的连接不再有效,则从向量删除之,然后递归调用自己以尝试新的可用连接
*/
public synchronized Connection getConnection()
{
Connection con = null;
if(freeConnections.size() > 0)
{// 获取向量中第一个可用连接
con = (Connection)freeConnections.firstElement();
freeConnections.removeElementAt(0);
try
{
if(con.isClosed())
{
log("从连接池" + name + "删除一个无效连接");
con = getConnection();
}
}
catch(SQLException e)
{
log("从连接池" + name + "删除一个无效连接");
con = getConnection();
}
}
else if(maxConn == 0 || checkedOut < maxConn)
{
con = newConnection();
}
if(con != null)
{
checkedOut++;
}
return con;
} /**
从连接池获取可用连接,可以指定客户程序能够等待的最长时间
*@param timeout 以毫秒计的等待时间限制
*/
public synchronized Connection getConnection(long timeout)
{
long startTime = new Date().getTime();
Connection con;
while((con = getConnection()) == null)
{
try
{
wait(timeout);
}
catch(InterruptedException e){}
if((new Date().getTime() - startTime) >= timeout)
{
return null;
}
}
return con;
} /**
关闭所有连接
*/
public synchronized void release()
{
Enumeration allConnections = freeConnections.elements();
while(allConnections.hasMoreElements())
{
Connection con = (Connection)allConnections.nextElement();
try
{
con.close();
log("关闭连接池" + name + "中的一个连接");
}
catch(SQLException e)
{
log(e, "无法关闭连接池" + name + "中的连接");
}
}
freeConnections.removeAllElements();
} /**
创建新的连接
*/
private Connection newConnection()
{
Connection con = null;
try
{
if(user == null)
{
con = DriverManager.getConnection(URL);
}
else
{
con = DriverManager.getConnection(URL, user, password);
}
log("连接池" + name + "创建一个新的连接");
}
catch(SQLException e)
{
log(e, "无法创建下列URL的连接" + URL);
return null;
}
return con;
} /**
将文本信息写入日志文件
缺省为packaged
*/
void log(String msg)
{
logPrint.println(new Date() + ": " + msg);
} /**
将文本信息与异常写入日志文件
*/
void log(Throwable e, String msg)
{
logPrint.println(new Date() + ": " + msg);
e.printStackTrace(logPrint);
}
}
---------------------------------DBConnectionManager connMgr = DBConnectionManager.getInstance();
public Connection createConnection()
{ Connection dBConn = connMgr.getConnection(new SystemParameter().DBPOOLNAME);
return dBConn;
} public void closeConnection(Connection conn)
{
connMgr.freeConnection(new SystemParameter().DBPOOLNAME, conn);
connMgr.release(); }
经过测试,使用这种方法,会造成数据库大量死锁,证明该连接池实现方法存在隐患也可能是因为它不属于webserver容器自身的,不具有可管理性。2.3 tomcat连接池public Connection createConnection()
{ try
{
Context initCtx = new InitialContext();
DataSource ds;
ds = (DataSource) initCtx.lookup("java:comp/env/"+new SystemParameter().JDBC_SOURCE);
return ds.getConnection();
}
catch (NamingException e)
{ e.printStackTrace();
return null;
}
catch (SQLException e)
{ e.printStackTrace();
return null;
} } public void closeConnection(Connection conn)
{
if(conn!=null)try
{
conn.close();
conn=null;
}
catch (SQLException e)
{

e.printStackTrace();
}

}2.4 weblogic连接池public Connection createConnection()
{
Context ctx = null;
Hashtable ht = new Hashtable();
ht.put(Context.INITIAL_CONTEXT_FACTORY, CONTEXT_FACTORY);
ht.put(Context.PROVIDER_URL, URL);
// ht.put(Context.SECURITY_PRINCIPAL, "admin");
// ht.put(Context.SECURITY_CREDENTIALS, "11111111"); Connection conn = null; try
{
ctx = new InitialContext(ht);
DataSource ds = (DataSource) ctx.lookup(POOL_NAME);
return ds.getConnection();
}
catch (NamingException e)
{ e.printStackTrace();
}
catch (SQLException e)
{ e.printStackTrace();
}
return null; } public void closeConnection(Connection conn)
{
if (conn != null)
try
{
conn.close();
conn = null;
}
catch (SQLException e)
{ e.printStackTrace();
} }3,4的方法比较好

2. jsp连接池连接数据库,我有两句代码看不懂,求高手解释

你看下这个jsp引入了哪些jsp或者java包,顺着往上查。这个是封好的方法。

3. 面试时面试管要你写一个数据库连接池 怎么写(代码)

ASP+access数据库连接
<%
set conn= Server.CreateObject("adodb.connection")
conn.open "provider=microsoft.jet.oledb.4.0;data source="&server.MapPath("data/db.mdb")
%>
你应该反问他,你需要我写那一种数据库连接的代码呢??因为不同的数据库有不同的用法和安全性~~~
MSSQl和mysql都算是比较安全的!但是就需要服务器的支持,而access一般来说,只要服务器支持ASP的就可以了!~~
还有其他特别的数据库,例如:Oracle等等。都有不同的连接方法和代码。如果不是很具体的说明使用那种数据库,很难做出正确答案!
用我的和1楼的都可以的!只是数据库不同~~~
还有你要问你是想我用什么的语言实现。网页类语言很多的!
常用的有:ASP,ASP.net,PHP,CGI,JSP。
各种的数据库连接方式都不同,而代码就更为不同了!
但是基本原理都和二楼的大为相似~~~
所以要看你的要求达到那个水平才行~~~

4. java 多次执行一个sql后 释放不了数据库连接池 怎么办 代码如下!求解决

貌似你的if段里面有个break吧!不知道你这段语句是否是在某循环中吧
如果碰到break就会退出循环,就别说后面的s.close()了
也就是说数据连接无法合理关闭,可能会出现各种溢出,连接不够用等

5. 如何在NetBeans中设置数据库连接池

以往要设置数据库连接池,需要借助于第三方软件。但现在NetBeans所带的Tomcat 5.5.7及Sun Application Server 8均可以直接设置。下面谈谈如何在Tomcat 5.5.7下设置。
1. 下载数据库的专用连接驱动,并将其复制到C:Program Filesetbeans-4.1entERPrise1jakarta-tomcat-5.5.7commonlib文件夹下面。
假设所用数据库是Sybase的Adaptive Server Anywhere,从Sybase官方站点下载JConnect-6_0,从中抽取出jconn3这个驱动,复制到上述文件夹下。
2. 启动Tomcat,在IE输入http://localhost:8084/admin/,以管理员身份登录管理。用户登录的方法可参考第5楼。点击Resources下的Data Sources,在右边Data Source Actions的下拉框中选Create New Data Source,按下表示范填写:
JNDI Name: sybase/poolDB /* 根据喜好填 */
Data Source URL: JDBC:sybase:Tds:<localhost>:<端口号>
/* 数据库的地址,此为jconn3的形式,端口号需查询确认,但一般都是固定的,除非自己更改 */
JDBC Driver Class: com.sybase.jdbc3.jdbc.SybDriver /* jconn3的驱动 */
User Name: dba/* 用户名,默认为dba */
Password: *** /* 密码,默认为sql */
Max. Active Connections: 4/* 最大活动连接数 */
Max. Ide Connections: 2 /* 最大空闲连接数 */
Max. Wait for Connecton: 5000 /* 等待连接的最大秒数 */
Validation Query: /* 验证字符串,可不填 */

按"Save",再按"Commit Changes",Tomcat在后台将此变化保存到server.XML文件中。"Commit Changes"是最容易忘记的,小心。
3. 以下均转入NetBeans环境中设置。在context.xml修改的内容:
<Context path="/Matrix">
<ResourceLink global="sybase/poolDB" name="sybase/poolDB" type="Javax.sql.DataSource"/>
</Context>
"/Matrix"为此Web应用的根地址,表现为http://localhost:8084/Matrix。
4. 在web.xml中加入:
<resource-ref>
<description>Sybase Database Connection Pool</description>
<res-ref-name>sybase/poolDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
5. 好了,可以使用连接池了。以下代码为在JSP文件中使用JSTL标签库的范例。
<sql:query var="queryresults" dataSource="sybase/poolDB">
SELECT * FROM customer
</sql:query>

6. mysql 数据库连接池

把url改成url="jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=GB2312"

7. 使用C#访问Oracle,使用连接池,代码如何写,数据库端要不要做配置

string my="data source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP) (HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=cjsorcl)));User ID=cjsdog;Password=cjsmap;Pooling = True;Max Pool Size = 10;Min Pool Size = 1;"
OracleConnection conn = new OracleConnection(my);
conn.Open();
... ...
... ...
conn.Close();
连接字符串后加“Pooling = True;Max Pool Size = 10;Min Pool Size = 1;”这三个参数即可实现应用连接池。
Pooling:是否启用连接池,True为启用
Max Pool Size:连接池最大连接数
Min Pool Size:连接池最小连接数

8. 以下是C3P0数据库连接池使用代码,说明各语句含义 Class.forName("com.mysq

Class.forName("com.mysql.jdbc.Driver");//加载驱动类datasource=new combopooledDataSource();datasource.setDriverClass("com.mysql.jdbc.Driver");//设置驱动datasource.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/reg")datasource.setUser("root");//设置用户名datasource.setPassword("037500");//设置密码conn=C3P0DAO.getConnection();//获取连接pt=conn.prepareStatement("insert into fckeditor (content) value(?)");//预编译sql语句pt=setString(1,content);//设置参数pt.excute();//执行sql语句pt.close();//关闭prepareStatement
conn.close();//释放链接

9. java中建立数据库连接池,有哪几个步骤

Context context=new InitialContext();
DataSource ds=(DataSource)context.lookup("java:comp/env/jdbc/"+projectName);这里的projectName指的是你的项目名称然后在tomcatde 的\conf\Catalina\localhost目录下配置一个和你项目名称相同的xml文件文件的配置方法可以去网络下很多的,这样就可以使用连接池了。

10. 请问那位可以给个用纯java实现数据库连接池的代码

DataSource ds=null;
Connection con=null;
PreparedStatement ps=null;
ResultSet rs=null;
String username=null;

try{
//实现数据连接池
Context ctx=new InitialContext();
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/userInfo");
}catch(NamingException ne){ne.printStackTrace();}
try{
con=ds.getConnection();
String sql="select * from guestbook order by gst_time desc";
st=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
rs=st.executeQuery(sql);
。。。。。。
。。。

}
在这段代码中
Context ctx=new InitialContext();
ds=(DataSource)ctx.lookup("java:comp/env/jdbc/userInfo");就是连接池代码。
它是读取配置文件(Context.xml)中数据的。
以下是配置文件:
<Context path="/WebMole1" docBase="E:\Home\WebMole1" reloadable="true">
<Resource name="jdbc/userInfo" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" username="sa" password="bye0406"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
url="jdbc:microsoft:sqlserver://localhost:1433;databasename=userInfo" />
</Context>

path和docBase中的路径根据自己需要配置路径。该路径是WEB应用程序的路径。driverClassName和url是连接数据库的驱动类和连接的URL,是根据你使用的哪种数据库而定。
以下是四种数据库的配制驱动:
驱动
SQL Server 2000
类名:com.microsoft.jdbc.sqlserver.SQLServerDriver
URL:jdbc:microsoft:sqlserver://localhost:1433;databasename=pubs

Oracle
类名:oracle.jdbc.driver.OracleDriver
URL:jdbc:oracle:thin:@localhost:152:ORCL

Mysql
类名:com.mysql.jdbc.Driver
URL:jdbc:mysql://localhost:3306/databasename

JDBC-ODBC
类名:sun.jdbc.odbc.JdbcOdbcDriver
URL:jdbc:odbc:datasource_name;

热点内容
内置存储卡可以拆吗 发布:2025-05-18 04:16:35 浏览:336
编译原理课时设置 发布:2025-05-18 04:13:28 浏览:378
linux中进入ip地址服务器 发布:2025-05-18 04:11:21 浏览:612
java用什么软件写 发布:2025-05-18 03:56:19 浏览:32
linux配置vim编译c 发布:2025-05-18 03:55:07 浏览:107
砸百鬼脚本 发布:2025-05-18 03:53:34 浏览:944
安卓手机如何拍视频和苹果一样 发布:2025-05-18 03:40:47 浏览:741
为什么安卓手机连不上苹果7热点 发布:2025-05-18 03:40:13 浏览:803
网卡访问 发布:2025-05-18 03:35:04 浏览:511
接收和发送服务器地址 发布:2025-05-18 03:33:48 浏览:372