DBCP 数据库连接池JNDI连接 学习笔记

本文详细介绍了数据库连接池的概念,以DBCP为例,通过在MyEclipse、tomcat及Sybase环境中配置连接池,实现了减少数据库连接数量,提高访问效率的目标。包括加入DBCP包、配置tomcat和web.xml、JNDI调用及实际应用测试等步骤,并提供了测试JSP代码,演示了如何利用连接池获取和操作数据库资源。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据库连接池:减少数据库连接的数量提高数据库访问效率


DBCP优点:
1\速度快
2\tomcat 都默认使用DBCP,說明大众!
3\连接数控制与连接归还策略
4\应对网络不稳定的策略
5\应对连接泄漏的策略


测试环境:MyEclipse 6.5+ tomcat 6.0+ Sybase ase

1、加入DBCP包:commons-dbcp-1.4.jar jconn3.jar

2\在tomcat content.xml 中加入
<Resource name="/jdbc/resourceName"
type="javax.sql.DataSource"
driverClassName="com.sybase.jdbc3.jdbc.SybDataSource"
url="jdbc:sybase:Tds:127.0.0.1:4001/amls"
username=""
password=""
maxActive="40"
maxIdle="2"
maxWait="50000" />

3\修改项目的web.xml
<resource-ref>
<description>
Resource reference to a factory for java.sql.Connection
instances that may be used for talking to a particular
database that is configured in the
configurartion for the web application.
</description>
<res-ref-name>
amls
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>

4\ java 调用JNDI

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

import com.handson.dao.UserDao;
import com.handson.dto.User;

public class ConnectionProvider {
private static DataSource ds = null;
static{
try {
Context c = new InitialContext();
ds = (DataSource) c.lookup("java:/comp/env/jdbc/resourceName"); //此处默认需要加/comp/env,可以进行设置不加!
} catch (NamingException e) {
e.printStackTrace();
}

}
//以下为JDBC连接!
//Class.forName(driverName);
// Connection dbConn = DriverManager.getConnection(dbURL, userName, userPwd);

public static Connection getConnection(){
if(ds != null){
try {
return ds.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
}
return null;
}


}


5 获取连接JAVA:
package com.handson.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.handson.dbcp.*;
import com.handson.dto.User;

public class UserDao {
private Connection con;
public User findUserByUserName(String userName){
con = ConnectionProvider.getConnection();
String sql = "select * from userInfo where Username = ?";
PreparedStatement pst = null;
ResultSet rs = null;
User user = null;
try {
pst = con.prepareStatement(sql);
pst.setString(1, userName);
rs = pst.executeQuery();
if(rs.next()){
user = new User();
user.setHost(rs.getString("Host"));
user.setUser(rs.getString("Username"));
user.setPassword(rs.getString("Password"));
}
} catch (SQLException e) {
e.printStackTrace();
}
return user;
}
}

6测试JSP:

<body>
<% UserDao dao = new UserDao();
User user=dao.findUserByUserName("root");
out.println("Host:"+user.getHost()+"<br>");
out.println("User:"+user.getUser()+"<br>");
out.println("Password:"+user.getPassword()+"<br>");
%>
</body>


TIPS:

这个上面的思路不是太清晰的,其实可以将第一步的配置文件放到项目下!
还没有完全理解透彻!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值