社区
Web 开发
帖子详情
数据库连接池,求救啊, 大哥快帮帮我啊!
jt80
2004-08-03 05:02:10
希望能提供一个TOMCAT下MS SQLSERVER的数据库连接池配置的例子,从SERVER.XML文件的修改到实际例子,我先谢谢了。头大啊。。。。。。。。。。。
...全文
3507
24
打赏
收藏
数据库连接池,求救啊, 大哥快帮帮我啊!
希望能提供一个TOMCAT下MS SQLSERVER的数据库连接池配置的例子,从SERVER.XML文件的修改到实际例子,我先谢谢了。头大啊。。。。。。。。。。。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
24 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
hubofly
2004-09-28
打赏
举报
回复
jt80(冷酷无情)
我的例子是我运行成功的啊 怎么可能的啊?你现在还没有解决么?
要不我们聊聊
124362183
jt80
2004-08-04
打赏
举报
回复
还是不行啊,我快崩溃了,都两天了,还搞不定啊,哪位高手,帮帮我啊,给个详细点的啊
从配置到实际例子,分不够再加啊
hubofly
2004-08-04
打赏
举报
回复
上面的还不可以么?
我给你个JSP的写法吧
我对XML不是很明白了
<%@ page contentType="text/html;charset=GBK" import="java.sql.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>untitled</title>
</head>
<body>
<%
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance();
Connection con=java.sql.DriverManager.getConnection("jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=team","sa","sa");
String sql = "select * from logon" ;
PreparedStatement stmt= con.prepareStatement(sql);
ResultSet rs=stmt.executeQuery();%>
<%while(rs.next()){%>
<tr>
<td><%=rs.getString(1)%></td>
<td><%=rs.getString(2)%></td>
<td><a href=update.jsp?id=<%=rs.getString(1)%>>update</a></td>
<td><a href=delete.jsp?id=<%=rs.getString(1)%>>delete</a></td>
</tr>
<%}%>
<%
stmt.execute();
stmt.close();
con.close();
%>
success
</body>
</html>
你要加载驱动哦
jt80
2004-08-04
打赏
举报
回复
高手,帮帮忙啊,头大啊!
jt80
2004-08-04
打赏
举报
回复
继续关注,能详细点吗?
我初学,好多东西都不知道的啊
wypunk
2004-08-04
打赏
举报
回复
在server.xml里如此设置:
<Context path="/iTry" docBase="iTry" debug="0" crosscontext="true" reloadable="true">
<Resource name="jdbc/stu_" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/stu">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value>FDS</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://FDS:1433;DatabaseName=library</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>20</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>5</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>
</ResourceParams>
</Context>
这是我用的,估计兄弟可以看懂吧,该成你自己的就可以了
程序如此写:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="java.io.*"%>
<%@ page import="javax.servlet.*"%>
<%@ page import="javax.servlet.http.*"%>
<%@ page import="javax.naming.*" %>
Context initContext = new InitialContext();
Context envContext = (Context)initContext.lookup("java:/comp/env");
DataSource ds = (DataSource)envContext.lookup("jdbc/stu");
Connection conn=ds.getConnection();
可以了吧~
jt80
2004-08-04
打赏
举报
回复
谢谢楼上的,挺详细的,可是你没有提供URL啊,能再具体说一下吗?
hbzyduwu
2004-08-04
打赏
举报
回复
首先,server.xml在tomcat的安装目录conf目录下,连结池数据源的驱动、URL、用户名、密码,以及此连结产生资源名的等参数都保存在这里。下面就是一个例子:
<Context ...>
...
<Resource name="jdbc/Test" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/Test">
<parameter>
<name>user</name>
<value></value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>sun.jdbc.odbc.JdbcOdbcDriver</value>
</parameter>
<parameter>
<name>driverName</name>
<value>jdbc:odbc:test</value>
</parameter>
</ResourceParams>
...
</Context>
这里有一点大家尤其要注意的是Context中有path和docBase参数,server.xml中默认有一个
<Context path="/examples" docBase="examples" debug="0" reloadable="true">
如果把上面的代码放在这个<Context>之间,那它就是用来设置exmaple中的一个数据连结池资源,其他发布目录包括ROOT目录是无法调用到的。所以测试用的JSP页面也应该放到$CATALINA_HOME/webapps/examples目录下。如果你要在其他目录下发布的话,就应该建立一个相应的<Context>,并设置相应的连结资源。
言归正传,看了上面的代码,很容易理解,此数据库连结池的资源名为jdbc/Test。这个资源名在tomcat启动后根据server.xml中的参数立即生成,JSP和Servlet一般即直接调用了。不过按照J2EE的规范,应该在WEB-INF目录中的web.xml部署文件来实现此资源的调度(也可以将资源名重新映射成为你所需要的名字)。按照前面提到的,应该在examples\WEB-INF目录下的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 server.xml file.
</description>
<res-ref-name>
jdbc/Test
</res-ref-name>
<res-type>
javax.sql.DataSource
</res-type>
<res-auth>
Container
</res-auth>
</resource-ref>
完毕后,就可以写测试用的JSP文件了(test.jsp):
<%@ page import="javax.naming.Context" %>
<%@ page import="javax.sql.DataSource"%>
<%@ page import="javax.naming.InitialContext"%>
<%@ page import="java.sql.*"%>
<%
DataSource ds = null;
try{
Context initCtx = new InitialContext();
Context envCtx = (Context) initCtx.lookup("java:comp/env");
ds = (DataSource)envCtx.lookup("jdbc/Test");
if(ds!=null)
out.println("Connection is OK!");
else
out.println("Fail!");
}catch(Exception ne){ out.println(ne);}
%>
把它放到examples目录下即可。然后启动tomcat,输入http://localhost:8080/examples/test.jsp。
如果不成功,请参阅tomcat关于JNDI的文档,再仔细分析一边。
jt80
2004-08-04
打赏
举报
回复
高手帮忙解决一下啊!
loku
2004-08-04
打赏
举报
回复
郁闷一段就会好的
ps 你上边所说的是正确的
jt80
2004-08-04
打赏
举报
回复
楼上的,谢谢了,可是你说的我都照着做了,还是不行啊,
还有最好能把你们的配置文件(server.xml and web.xml)帖出来让我看看,还有
<Context path="/myapp" docBase="c:/myapp" debug="0" reloadable="true">
是什么意思, 设置了以后有什么用,是不是得把我做的代码放到这个路径下啊?
还有提供一个简单的测试例子就可以了,只要能证明连接池配置没问题就行啊,还有在sql server下建立数据库时是不是用户名和密码还要设置,总之,我现在是连不通啊,5555555555555
郁闷!
xinshou1979330
2004-08-04
打赏
举报
回复
//
后面的乱码不用理采
都是注释
xinshou1979330
2004-08-04
打赏
举报
回复
连接池代码
package conn;
import java.sql.*;
import javax.sql.*;
import java.util.Vector;
import java.util.Date;
import javax.naming.*;
import conn.*;
public class connpool{ // ゚Bスモウリ譿
private int maxconn; //ラ鋗Bスモ鳩
private int nActive; //メム・スィオト゚Bスモ鳩
private Vector freeCons=new Vector(); //エ諠ヲョ班ーソノモテ゚Bスモオト鳩スM
private Context initCtx = null;
private Context ctx =null;
private DataSource ds=null;
public connpool()
{
this.maxconn=20;
this.nActive =0;
try{
initCtx = new InitialContext();
if(initCtx==null) throw new Exception("Initial Failed!");
ctx = (Context) initCtx.lookup("java:comp/env");
//szJdbc="jdbc/bizcity" エヒヨオヤレTomcatオトSERVER.XMLホトシヨミナ葷テ
if(ctx!=null) ds= (DataSource) ctx.lookup("jdbc/mysqlDB");
if(ds==null) throw new Exception("Look up DataSource Failed!");
}
catch(Exception e){
System.out.println(e.getMessage());
}
}
public void SetMaxConn(int n){//トャユJラ鋗Bスモ鳩樣 20 ~ 200;
if(n<20) n=20;
if(n>200) n=200;
this.maxconn =n;
}
public synchronized void freeConnection(Connection con) //嗹゚゚Bスモ
{
try{
if(con.isClosed()){
con=null; //System.out.println("Connection is Closed\n");
}
else{
freeCons.addElement(con);
System.out.println("Add Exists Connection,Current Conut=" + freeCons.size());
}
}
catch(Exception e){System.out.println(e.getMessage());}
//notifyAll();
}
public synchronized Connection getConnection(long timeout) //ネ。オテメサ・゚Bスモ(ヨクカィウャ瓶瓶馮)
{ // synchronized ヨクテノメヤヤヒミミヤレカ猾゚ウフサキセウヨミ
long startTime=new Date().getTime(); //モ帑峙ャ瓶モテ
Connection con=null;
while(con==null){
if(freeCons.size()>0){//ヤレモミソノモテオト゚Bスモ瓶,゚xモテソノモテ゚Bスモ
con=(Connection) freeCons.firstElement(); //焼鳩スMヨミネ。オテオレメサ・
freeCons.removeElementAt(0); //゜焼鳩スMヨミ・ウ
try{
if(con.isClosed()){ //ネ郢鋐ム鷄饐,д犬メム・スィ゚Bスモ徘メサ
nActive--;
con=null;
}
}
catch(Exception e){System.out.println(e.getMessage());}
if(con!=null) System.out.println("Get Exists Connection\n");
}else if(nActive<maxconn){ //嫋モミソノモテ゚Bスモヌメメム・スィオト゚Bスモ鳩ミ。モレラ鋗オ瓶,・スィミツ゚Bスモ
con=newConnection();
if(con!=null) System.out.print("Create New Connection ******" + nActive );
}
if(con!=null) break; //ネ。オテソノモテ゚Bスモ矣,дヨアスモヘヒウネエ
//キt,゚Mミミオネエ0.5s,゚Mミミマツメサエホォ@ネ。゚Bスモオトイルラ・
try{
wait(500); //オネエ0.5テ・
}
catch(InterruptedException e) {}
if((new Date().getTime()-startTime)>=timeout){
System.out.println("Connection timeout\n");
break; //ウャ瓶дヘヒウ・
}
}
return con;
}
public void release(){ //鷄饐ヒミ゚Bスモ
int i=freeCons.size();
int j=0;
for (j=0;j<i;j++){
Connection con=(Connection)freeCons.elementAt(j);
try{
con.close();
}
catch(SQLException e) {
System.out.println("殪キィ鷄饐゚Bスモウリヨミオトョ班ー゚Bスモ");
}
}
freeCons.removeAllElements();
nActive=0;
}
private Connection newConnection(){ //・スィメサ・ミツ゚Bスモ
Connection con=null;
try{
con=ds.getConnection();
if(con==null) throw new Exception("Create Connection Failed!");
else nActive++;
}
catch(Exception e){
System.out.println(e.getMessage());
}
return con;
}
}
xinshou1979330
2004-08-04
打赏
举报
回复
在server.xml里如此设置:
<Context path="/myapp" docBase="c:/myapp" debug="0" reloadable="true">
<Resource name="jdbc/wordboard" auth="Container" type="javax.sql.DataSource" />
<ResourceParams name="jdbc/wordboard">
<parameter><name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter><name>driverClassName</name> <value>sun.jdbc.odbc.JdbcOdbcDriver</value>
</parameter>
<parameter><name>url</name><value>jdbc:odbc:wordboard</value>
</parameter>
<!-- com.microsoft.jdbc.sqlserver.SQLServerDriver
jdbc:microsoft:sqlserver://127.0.0.1:1433;DataBaseName=wordboard-->
<parameter><name>username</name><value>sa</value></parameter>
<parameter><name>password</name><value>lpy</value></parameter>
<parameter><name>maxActive</name><value>20</value></parameter>
<parameter><name>maxIdle</name><value>10</value></parameter>
<parameter><name>maxWait</name><value>-1</value></parameter>
</ResourceParams>
</Context>
web.xml中配置
<resource-ref>
<description> Datasource example</description>
<res-ref-name>jdbc/wordboard</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
jt80
2004-08-04
打赏
举报
回复
怎么没人给点实际的东西啊,
passwords
2004-08-04
打赏
举报
回复
to hubofly(幸福瞬间)
你写的是连接池!!!有没有搞错!!!
passwords
2004-08-04
打赏
举报
回复
我觉得配tomcat服务器的自带的连接池没什么用,不能很好的和开发工具整合,比如jbulider,还是自己写比较好!
loveunittesting
2004-08-04
打赏
举报
回复
严重用户,那么标准的东西不看,到网上来找什么?
wubai250
2004-08-04
打赏
举报
回复
强烈建议看一看tomcat5的文档!
lodestar51
2004-08-04
打赏
举报
回复
我也要学习连接池。。。
关注中。。。
加载更多回复(4)
Java源码系列-手写
数据库连接池
(附源码)
为了理解
数据库连接池
的底层原理,我们可以自己手写一个类似Hikari,Druid一样的高性能的
数据库连接池
!通过手写
数据库连接池
掌握
数据库连接池
底层运行原理,胜任企业级开发、提高编程内功!!!
数据库连接池
在内部对象池中,维护一定数量的数据库连接,并对外暴露数据库连接的获取和返回方法。如外部使用者可通过getConnection方法获取数据库连接,使用完毕后再通过releaseConnection方法将连接返回,注意此时的连接并没有关闭,而是由连接池管理器回收,并为下一次使用做好准备。 课程配套资料在课程附件中进行下载,学习过程总遇到任何技术相关问题可以及时沟通,远程解决~ 课程截图:
JDBC
数据库连接池
(超详解!!!)
JDBC 一、
数据库连接池
1.
数据库连接池
概念:存放数据库连接的一个容器(集合)Connection 当系统运行起来之后,这个连接池就被创建,在这个连接池当中,会申请一些对象,当有用户来访问数据库的时候,就从这个连接池当中获取连接对象,用户访问结束之后,连接池对象会归还给容器 2.连接池的实现 java官方提供了标准接口 DataSource(javax.sql包下) //常用方法 getConnection();//获取连接对象 conn.close();//归还连接池对象 此接口由数据库厂商为我
数据库连接池
学习笔记(一):原理介绍+常用连接池介绍
什么是连接池
数据库连接池
负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个。 为什么要使用连接池 数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。 一个数据库连接对象均对应一个物理数据库连接,每次操作都打开一个物理连接,使用完都关闭连接,这样造成系统的 性能低下。
数据库连接池
的解决方案是在应用程序启动...
JAVA之JDBC
数据库连接池
(超详细介绍)
JDBC
数据库连接池
一、JDBC
数据库连接池
的必要性二、
数据库连接池
技术三、多种开源的
数据库连接池
3.1 C3P0
数据库连接池
3.2 DBCP
数据库连接池
3.3 Druid(德鲁伊)
数据库连接池
一、JDBC
数据库连接池
的必要性 1、在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: (1)在主程序(如servlet、beans)中建立数据库连接 (2)进行sql操作 (3)断开数据库连接 2、这种模式开发,存在的问题: (1)普通的JDBC数据库连接使用 DriverManager 来
Druid
数据库连接池
1.
数据库连接池
简介
数据库连接池
是个容器,负责分配、管理数据库连接(Connection)。它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个; 释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。 好处: 资源重用。提升系统响应速度。避免数据库连接遗漏。 2.
数据库连接池
实现 标准接口:DataSource 官方(SUN)提供的
数据库连接池
标准接口,由第三方组织实现此接口。 功能:获取连接Connection getConn...
Web 开发
81,092
社区成员
341,716
社区内容
发帖
与我相关
我的任务
Web 开发
Java Web 开发
复制链接
扫一扫
分享
社区描述
Java Web 开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章