数据库连接池,求救啊, 大哥快帮帮我啊!

jt80 2004-08-03 05:02:10
希望能提供一个TOMCAT下MS SQLSERVER的数据库连接池配置的例子,从SERVER.XML文件的修改到实际例子,我先谢谢了。头大啊。。。。。。。。。。。
...全文
3507 24 打赏 收藏 转发到动态 举报
写回复
用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)

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧