100分求购java与sql2000的连接池

djpsunday 2004-04-30 05:51:32
我用的是TOMCAT5。0和JB9如何配连接池让JSP可以调用后台数据库的内容,在TOMCAT如何配置,而且问题多多,SQL的包我已下载安放在JB9\jkd1.4\lib目录下,classpath也指向了这三个包的路径,就总是找不到数据库的相应类的异常。更不用说用连接池的类了
...全文
113 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
djpsunday 2004-05-10
  • 打赏
  • 举报
回复
jtds-0.8.jar我下了放在jdk1.4\lib目录下,我用单纯的数据库驱动也注册不上呀,


import java.sql.*;

public class DATATEST
{
String sDBDriver="net.sourceforge.jtds.jdbc.Driver";
String sConnStr="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=message";
int page_size=5;
Connection conn=null;
Statement stmt=null;
ResultSet rs = null;
public DATATEST()
{
try{
Class.forName(sDBDriver);
}
catch(java.lang.ClassNotFoundException e)
{
System.err.println("sql_data():"+e.getMessage());
}
}



public String ex_chinese(String str){
if(str==null){
str ="" ;
}
else{
try {
str = new String(str.trim().getBytes("iso-8859-1"),"gb2312") ;
}
catch (Exception ex) {
}
}
return str ;
}

public void executeInsert(String sql)//插入数据
{
try
{
DriverManager.getConnection(sConnStr,"sa","120879");
stmt=conn.createStatement();
stmt.executeUpdate(sql);
}
catch(SQLException ex)
{
System.err.println("sql_data.executeUpdate:"+ex.getMessage());
}
}
public ResultSet executeQuery(String sql)//查询数据
{
try
{
conn=DriverManager.getConnection(sConnStr,"sa","120879");
stmt=conn.createStatement();
rs=stmt.executeQuery(sql);
}
catch(SQLException ex)
{
System.err.println("sql_data.executeQuery:"+ex.getMessage());
}
return rs;
}

}

再建个对数据库的操作实例怎么也不好用呀


public class DATATEST1 {
public DATATEST1() {
}
public static void main(String[] args){
DATATEST dba=new DATATEST();
dba.executeQuery("select * from user_1888");

}

}



djpsunday 2004-05-10
  • 打赏
  • 举报
回复
大虾,你讲到XML里面的了,对于这个.jar包在哪儿下呀
djpsunday 2004-05-10
  • 打赏
  • 举报
回复
大虾给点支持呀
snxnwn 2004-05-09
  • 打赏
  • 举报
回复
JSP中tomcat的SQL Server2000数据库连接池的配置
环境:
1. 数据库:Microsoft SQL Server 2000
2. 数据库驱动程序:net.sourceforge.jtds.jdbc.Driver
JNDI(Java Naming and Directory Interface)概述:
Tomcat4(5)提供了一个与Java Enterprise Edition应用服务相兼容的JNDI--InitialContext实现实例。它的初始数据设置在$CATALINA_HOME/conf/server.xml文件里,并可能在网页应用环境描述(/WEB-INF/web.xml)里被下列元素引用:
1) <env-entry>--环境入口,设置应用程序如何操作。
2) <resource-ref>--资源参数,一般是数据库驱动程序、JavaMail Session、自定义类工厂等。
3) <resource-env-ref>--在Servlet 2.4里用来简化设置不需认证信息的资源资源如环境参数、resource-ref变量。
InitialContext在网页应用程序初始化时被设置,用来支持网页应用程序组件。所有的入口和资源都放在JNDI命名空间里的java:comp/env段里。点击下列网址以获取更多信息:
1) Java命名和目录接口(Java Naming and Directory Interface)
2) J2EE平台说明(J2EE Platform Specification)
设置JNDI资源
设置JNDI资源要在$CATALINA_HOME/conf/server.xml文件里使用下列标志符:
1) <Environment>--设置域个可变的JNDI InitialContext入口的名字和值(同上面说的<env-entry>等价)。
2) <Resource>--设置应用程序可用的资源的名字和类型(同上面说的<resource-ref>等价)。
3) <ResourceParams>--设置Java资源类工厂的名称或将用的JavaBean属性。
4) <ResourceLink>--给全局JNDI环境(JNDI Context)添加一个链接。
上述这些标志符必须放在<Context>和</Context>之间(针对专门的网页应用程序)或<DefaultContext>和</DefaultContext>之间。
此外,设在网页应用环境描述(Web Application Descriptor)(/WEB-INF/web.xml)里的名字和值也在初始环境(Initial Context)里被设置,当被<Environemt>元素值允许时将被重设初始值。
全局变量能在<Server>子元素的<GlobalNamingResources>里设置。
数据库连接池概述:
数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。
数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。
数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:
1) 最小连接数是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费;
2) 最大连接数是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。
3) 如果最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。
配置Tomcat数据库连接池的前提:
1. 必须装有Java运行环境;
2. 必须有SQL Server2000数据库服务器(可以不在本地);
3. 必须有jtds.jar,并将它放在$CATALINA_HOME/common/lib目录下(只能是这里)。使用它是因为Microsoft公司的Java SQL Server驱动程序不支持二次查询,可到网上搜到。目前使用的是jtds-0.6.jar。
在$CATALINA_HOME/conf/server.xml里设置数据库连接池:
追求自由 2004-05-09
  • 打赏
  • 举报
回复
不好意思,刚才忘记写程序了
<%@ page language="java" contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.util.*"%>
<%@ page import="javax.naming.*"%>
<%/*Class.forName("com.internetcds.jdbc.tds.Driver").newInstance();
String url="jdbc:freetds://server:1488/newXXFB";
Connection con= DriverManager.getConnection(url,"qcc","qcc");
Statement smt=con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs;

String sql="select * from infomation";
System.out.println(sql);
rs=smt.executeQuery(sql);
while (rs.next()){


System.out.println(rs.getString(1));

}
*/
%>
<%
//这是直接连接
/*
Driver myDriver =(Driver)Class.forName("weblogic.jdbc.mssqlserver4.Driver").newInstance();

String driverURL = "jdbc:weblogic:mssqlserver4";
Properties myProperties = new Properties();
myProperties.put("server", "server:1488");
myProperties.put("db", "newXXFB");
myProperties.put("user", "qcc");
myProperties.put("password", "qcc");
Connection con =myDriver.connect(driverURL, myProperties);
Statement smt=con.createStatement();
ResultSet rs;
String sql="select * from infomation";
System.out.println(sql);
rs=smt.executeQuery(sql);
while (rs.next()){
System.out.println(rs.getString(1));
}
*/
%>
<%//用连接池连接
/*
String driverName = "weblogic.jdbc.pool.Driver";
Driver myDriver =(Driver)Class.forName(driverName).newInstance();
String driverURL = "jdbc:weblogic:pool:sqlPool";
Connection con =myDriver.connect(driverURL, null);
Statement smt=con.createStatement();
ResultSet rs;
String sql="select * from infomation";
System.out.println(sql);
rs=smt.executeQuery(sql);
while (rs.next()){
System.out.println(rs.getString(1));
}*/

%>
<%//用datasourcce连接数据库
javax.sql.DataSource myDS = null;
Connection con=null;
try {
Context myContext = new InitialContext();
myDS = (javax.sql.DataSource) myContext.lookup("myDataSource");
}
catch (NamingException e) {
}
try {
con = myDS.getConnection();
}
catch (SQLException e) {
}
Statement smt=con.createStatement();
ResultSet rs;
String sql="select * from infomation";
System.out.println(sql);
rs=smt.executeQuery(sql);
while (rs.next()){
System.out.println(rs.getString(1));
}

try{
con.close();
}
catch (SQLException e)
{ System.out.println(e.getMessage());
}
%>
lhbf 2004-05-09
  • 打赏
  • 举报
回复
建议使用容器自己的连接池(如:tomcat或者struts中都可以配置连接池的)而不是临时写一个自己的。
有时,一个质量不高的连接池,即使只有三两个人访问也会让你的cpu利用率达到100%的
  • 打赏
  • 举报
回复
web.xml中添加!

<servlet>
<servlet-name>dbInit</servlet-name> //初始化数据库连接
<servlet-class>scws.db.DBInitServlet</servlet-class>
<init-param>
<param-name>driverClass</param-name>
<param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value>
</init-param>
<init-param>
<param-name>type</param-name>
<param-value>org.apache.struts.util.GenericDataSource</param-value>
</init-param>
<init-param>
<param-name>jdbcURL</param-name> //连接的URL
<param-value>jdbc:odbc:数据源名</param-value>
</init-param>
<init-param>
<param-name>maxCount</param-name> //最大连接数
<param-value>5</param-value>
</init-param>
<init-param>
<param-name>minCount</param-name> //最小连接数
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>密码</param-value>
</init-param>
<init-param>
<param-name>userName</param-name>
<param-value>用户名</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
追求自由 2004-05-09
  • 打赏
  • 举报
回复
给你一个例子,是用jrun4+sqlserver,相信应该差别不大。
追求自由 2004-05-09
  • 打赏
  • 举报
回复
你是怎么做的?是配制一个连接池然后在程序中访问吗?还是自已实现一个连接池?
bon_jovi 2004-05-09
  • 打赏
  • 举报
回复
帮你转贴一个

一、找到jdbc的安装目录,把lib目录下面的msbase.jar和mssqlserver.jar、msutil.jar三个文件一起copy到$CATALINA_HOME/common/lib/($CATALINA_HOME代表的是你的tomcat5的安装目录)

二、用文本编辑器,我这是使用editplus(她可是我的挚爱奥)打开$CATALINA_HOME/conf/server.xml文件,找到配置context的地方,把下面的代码
粘贴到文件里面

<Context path="/DBTest" docBase="D:\rautinee work\db\"
debug="5" reloadable="true" crossContext="true">

<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_DBTest_log." suffix=".txt"
timestamp="true"/>

<Resource name="jdbc/TestDB"
auth="Container"
type="javax.sql.DataSource"/>

<ResourceParams name="jdbc/TestDB">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>

<!-- Maximum number of dB connections in pool. Make sure you
configure your mysqld max_connections large enough to handle
all of your db connections. Set to 0 for no limit.
-->
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>

<!-- Maximum number of idle dB connections to retain in pool.
Set to 0 for no limit.
-->
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>

<!-- Maximum time to wait for a dB connection to become available
in ms, in this example 10 seconds. An Exception is thrown if
this timeout is exceeded. Set to -1 to wait indefinitely.
-->
<parameter>
<name>maxWait</name>
<value>10000</value>
</parameter>

<!-- MSSQLserver dB username and password for dB connections -->
<parameter>
<name>username</name>
<value>sa</value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>

<!-- Class name for mssqlserver JDBC driver -->
<parameter>
<name>driverClassName</name>
<value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>
</parameter>

<!-- The JDBC connection url for connecting to your mssqlserver dB.-->
<parameter>
<name>url</name>
<value>jdbc:microsoft:sqlserver://localhost:1433;databasename=Northwind</value>
</parameter>
</ResourceParams>
</Context>

注意:我本地的数据库的sa的密码为空,数据库使用的是Northwind,我的目录名DBTest,他的目录是D:\rautinee work\db
打开DBTest下面的web.xml文件,用下面的代码替换原来的内容

<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<description>MSSql server Test App</description>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/TestDB</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>

ok,配置完成,下面的工作是需要编写两个文件测试一下,连接是否成功。

这里我用了http://jakarta.apache.org上面的例子

首先是bean文件

package foo;

import javax.naming.*;
import javax.sql.*;
import java.sql.*;

public class DBTest {

String foo = "Not Connected";
int bar = -1;

public void init() {
try{
Context ctx = new InitialContext();
if(ctx == null )
throw new Exception("Boom - No Context");

DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/TestDB");

if (ds != null) {
Connection conn = ds.getConnection();

if(conn != null) {
foo = "Got Connection "+conn.toString();
Statement stmt = conn.createStatement();
ResultSet rst =
stmt.executeQuery("select * from orders");
if(rst.next()) {
foo=rst.getString("CustomerID");
bar=rst.getInt("OrderID");
}
conn.close();
}
}
}catch(Exception e) {
e.printStackTrace();
}
}

public String getFoo() { return foo; }
public int getBar() { return bar;}
}


然后是index.jsp文件

<html>
<head>
<title>DB Test</title>
</head>
<body>

<%
foo.DBTest tst = new foo.DBTest();
tst.init();
%>

<h2>Ms sql server 2000 java search Results</h2>
Foo <%= tst.getFoo() %><br/>
Bar <%= tst.getBar() %>

</body>
</html>


编译运行,如果不出意外,应该检索到一条记录,

我的ie中显示的是
Ms sql server 2000 java search Results
Foo VINET
Bar 10248

ok,配制成功!
bibleboy 2004-05-09
  • 打赏
  • 举报
回复
http://dev2dev.bea.com.cn/bbs/thread.jspa?forumID=123&threadID=10754&tstart=15
去看看也许有帮助
djpsunday 2004-05-09
  • 打赏
  • 举报
回复
这么久也没有人给我解决呀,大虾门支持呀
minghuitian 2004-04-30
  • 打赏
  • 举报
回复
gz

81,094

社区成员

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

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