tomcat 6.0.20 连接池配置 SQL server 2000数据库

转载 2011年11月19日 20:11:20
我的测试是程序是index.jsp 
<%@   page   contentType="text/html;charset=gb2312"%>    
<%@   page   import="java.sql.*"%>   
<%@   page   import="javax.sql.*"%>   
<%@   page   import="javax.naming.*"%>   
<HTML> 
<HEAD> 
<TITLE>JSP测试页面</TITLE> 
</HEAD> 
<BODY> 
<%out.println("<h1>Hello,test JNDI ! </h1>");%> 
<% 
     Context ctx = new InitialContext();    
      Context envctx = (Context)ctx.lookup("java:comp/env");    
      DataSource ds = (DataSource) envctx.lookup("jdbc/TestDB");    
      Connection  conn=ds.getConnection();    
      Statement st=conn.createStatement();   

out.print("使用jdbc驱动操作数据库操作成功,恭喜你"); %> 

</BODY> 
</HTML>  

tomcat 的conf的context.xml的配置如下: 
<?xml version='1.0' encoding='utf-8'?> 

<Context> 

    <!-- Default set of monitored resources --> 
    <WatchedResource>WEB-INF/web.xml</WatchedResource> 
    <Resource name="jdbc/TestDB" auth="Container" 
              type="javax.sql.DataSource" 
              username="zhanghr" 
              password="000000" 
              maxWait="50" 
              maxIdle="40" 
              maxActive="10" 
              driverClassName="com.microsoft.jdbc.sqlserver.SQLServer" 
              url="jdbc:microsoft:sqlserver://192.168.1.109:1433;DatabaseName=test" /> 
</Context> 

我的程序目录WEN-INF中web.xml文件配置如下: 
<?xml version="1.0" encoding="ISO-8859-1"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_4.xsd" 
   version="2.4"> 

  <display-name>DbTest</display-name> 

<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> 

我得到的出错信息是: 
description The server encountered an internal error () that prevented it from fulfilling this request. 

exception 

org.apache.jasper.JasperException: An exception occurred processing JSP page /index.jsp at line 15 

12:      Context ctx = new InitialContext();    
13:       Context envctx = (Context)ctx.lookup("java:comp/env");    
14:       DataSource ds = (DataSource) envctx.lookup("jdbc/TestDB");    
15:       Connection  conn=ds.getConnection();    
16:       Statement st=conn.createStatement();   
17: 
18:  out.print("使用jdbc驱动操作数据库操作成功,恭喜你"); %> 
Stacktrace: 
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:505) 
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:398) 
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342) 
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:717) 



这是我自己写的,肯定好用,参考一下吧。 
数据库连接的建立和关闭是非常耗费系统资源的操作。数据库连接池的解决方案是在应用程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由应用程序动态的对池中的连接进行申请、使用和释放。对于多余连接池中的连接数的请求,应在请求队列中排队等待。并且应用程序会根据连接的使用率动态的增加和减少池中的连接数。 
连接池技术尽可能多的重用了消耗内存的资源,大大节省了内存,提高了服务器的效率。 
不同的版本的tomcat创建连接池的方法是不同的。下面基于tomcat5.5 + MS sql server 2k来说明。 
step1:数据库驱动(三个jar)放到$tomcat$/common/lib中。 
step2:打开$tomcat$/conf/server.xml,在host下加入如下代码 
以下是引用片段: 
<Context path="" docBase="D:\myelipseJsp\dsideal\WebRoot" reloadable="true"> 
<Resource 
      name="jdbc/xxx" 
      type="javax.sql.DataSource" 
      username="sa" 
      password="" 
      driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver" 
      url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=database" 
      maxActive="300" 
      maxIdle="100" 
      maxWait="5000" 
      removeAbandoned="true" 
      removeAbandonedTimeout="100"   
      logAbandoned="true" 
        /> 
</Context> 



注:在tomcat6.0下,需要在Resource中加入一句auth="Container"即可。 

maxActive是最大激活连接数,这里取值为300,表示同时最多有300个数据库连接。 
maxIdle是最大的空闲连接数,这里取值为100,表示即使没有数据库连接时依然可以保持100空闲的连接,而不被清除,随时处于待命状态。 
MaxWait是最大等待秒钟数,这里取值5000,表示5秒后超时,也可取值-1,表示无限等待,直到超时为止。 
removeAbandoned="true" 
removeAbandonedTimeout="100"   
logAbandoned="true" 
以上三句话也需要加入,其主要作用在于当并发用户超过预定的连接后会有一些连接因为等待而失效,要及时回收这些无效链接。100表示100秒。 

在connpool.jsp中使用。 

以下是引用片段: 
<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %> 
<%@ page import="javax.naming.Context"%> 
<%@ page import="javax.sql.DataSource"%> 
<%@ page import="javax.naming.InitialContext"%> 
<%@ page import="java.sql.*"%> 
<html> 
<body> 
<% 
Context ctx = new InitialContext(); 
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/xxx"); 
Connection conn = ds.getConnection(); 
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
String sql="select * from news"; 
ResultSet rs=stmt.executeQuery(sql); 
while(rs.next()) {%> 
您的第一个字段内容为:<%=rs.getString(1)%> <br> 
<%}%> 
<%out.print("数据库操作成功,恭喜你");%> 
<%rs.close(); 
stmt.close(); 
conn.close();   
%>  


注意两段代码中的jdbc/xxx为连接池的名字,要保持一致。 

当然我们也可以将连接封装起来,作为一个类使用。结合我们以前所讲的dataconn.java,这里我将它们合并为一个类。代码如下: 

以下是引用片段: 
package dataconn; 
import java.sql.*; 
import javax.naming.*; 
import javax.sql.DataSource; 
public class  dataconn{ 
ResultSet rs = null; 
Connection conn=null; 
Statement stmt=null; 
//连接池 
public  static  synchronized Connection getConnection() throws Exception 

  try 
  { 
   
   Context initCtx = new javax.naming.InitialContext(); 
            Context envCtx = (Context) initCtx.lookup("java:comp/env"); 
            DataSource ds = (DataSource)envCtx.lookup("jdbc/xxx"); ; 
   return ds.getConnection(); 
  } 
  catch(SQLException e) 
  { 
   throw e; 
  } 
  catch(NamingException e) 
  { 
       throw e; 
  } 
  

//更新数据 
public void executeUpdate(String sql) { 
  try { 
   conn = getConnection(); 
   } 
  catch (Exception ex) { 
                           ex.printStackTrace(); 
                   } 
  try { 
    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
   stmt.executeUpdate(sql); 
   } 
  catch(SQLException ex) { 
   System.err.println("aq.executeUpdate: " + ex.getMessage()); 
   System.err.println("aq.executeUpadatestrSQL: " + sql); 
   } 
  } 
  
//查询数据 
public ResultSet executeQuery(String sql) { 
   rs = null; 
   try { 
   conn = getConnection(); 
   } 
  catch (Exception ex) { 
                           ex.printStackTrace(); 
                   } 
   try { 
    stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
    rs = stmt.executeQuery(sql); 
    } 
   catch(SQLException ex) { 
    System.err.println("aq.executeQuery: " + ex.getMessage()); 
    System.err.println("aq.executeQuerystrSQL: " + sql); 
   } 
   return rs; 
  }  
  
public void closeStmt() 
  { 
   try{ 
    if(stmt!=null){ 
     stmt.close(); 
    } 
      } 
   catch(SQLException e){ 
    e.printStackTrace(); 
      } 
  } 


public void closeConn() 

  try{ 
   if (conn!=null){ 
    conn.close(); 
   } 
     } 
  catch(SQLException e){ 
   e.printStackTrace(); 
     } 




此外你要保证你的sqlserver数据库是好用的才行,用这个测试一下 
<%@ page contentType="text/html;charset=gb2312"%> 
  <%@ page import="java.sql.*"%> 
  <html> 
  <body> 
  <% 
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver").newInstance(); 
  String url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=data_2007"; 
  String user="sa"; 
  String password="sa";   
  Connection conn= DriverManager.getConnection(url,user,password); 
  Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); 
  String sql="select * from userlist"; 
  ResultSet rs=stmt.executeQuery(sql); 
  while(rs.next()) {%> 
  您的第一个字段内容为:<%=rs.getString(1)%> <br> 
  您的第二个字段内容为:<%=rs.getString(2)%> <br> 
  您的第三个字段内容为:<%=rs.getString(3)%> <br> 
  <%}%> 
  <%out.print("数据库操作成功,恭喜你");%> 
  <%rs.close(); 
  stmt.close(); 
  conn.close();   
  %> 

将上面代码另存为.jsp,注意修改数据库名,用户名和密码,即可测试sql server是否安装成功。

通过Tomcat连接池连接SQL Server数据库

配置Tomcat连接池主要使用的是标签,下面对本实例中用到标签中的属性进行详细讲解。 (1)name:数据库连接池名称。 (2)type:数据库连接池类型。 (3)driverClassName...
  • q1203595629
  • q1203595629
  • 2013年07月26日 15:42
  • 2212

tomcat配置sqlserver数据库

1. 首先确保Tomcat安装目录中的\common\lib(对于Tomcat5.5)或者是\lib(Tomcat6.0)目录中已包含JDBC连接数据库所必须的三个.jar文件(msbase.jar ...
  • u010530213
  • u010530213
  • 2014年06月22日 09:36
  • 3933

Tomcat数据库连接池配置

一定是那些踩过坑的人,才急切地想要把坑填平。 Tomcat数据库连接池配置,本来是一件很简单的事情,网上也有不少的文章,但是大多只有文字描述,没有图向导,对于初学者来说,信息量太大,很容易搞不清楚哪...
  • qq_24421591
  • qq_24421591
  • 2016年04月04日 10:09
  • 13031

MySQL+tomcat9数据库连接池

数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”,预先在池中放入一定数量的连接,需要建立数据库连接时,只需从池中取出一个,使用完毕之后再放回去。 配置tomcat安装目录下conf目录下的c...
  • qq_35362572
  • qq_35362572
  • 2017年05月21日 18:38
  • 186

SQL Server 2000/2008导入导出数据表

SQL Server 2000/2005/2008将excel导入数据库表、将一个数据库的数据表导入到另一个数据库,也可以是2台电脑/云服务器上的数据库的数据表之间的导入方法一样。数据表的导出方法相仿...
  • Gordennizaicunzai
  • Gordennizaicunzai
  • 2016年02月28日 22:18
  • 1137

浅谈tomcat的配置及数据库连接池的配置

1.如何修改tomcat的端口 在某些情况下,可能需要修改tomcat监听的端口8080,比如: a.需要启动两份tomcat服务器 b.某个服务占用了8080端口(1433,1521,3306......
  • xushouwei
  • xushouwei
  • 2015年07月25日 17:53
  • 587

DBCP连接池连接数据库

DBCP连接池。 关键代码: (1)   dbcp.properties//配置文件 driverClassName=com.microsoft.sqlserver.jdbc.SQLServer...
  • sanganqi_wusuierzi
  • sanganqi_wusuierzi
  • 2017年02月03日 23:05
  • 1077

Tomcat数据库连接池的配置方法总结

实例使用的Tomcat版本为6.0(叶涛为您解答) 方法一: 在Tomcat的conf/context.xml中配置 在Tomcat\apache-tomcat-6.0.33\conf目录下的...
  • yetaodiao
  • yetaodiao
  • 2013年10月17日 14:36
  • 38105

tomcat-dbcp数据库连接池配置以及使用时候的一些坑

一、数据库连接池 开发的时候经常会需要对数据库进行一些操作,比如说常见的增删改查之类的,当数据量小的时候,可以直接进行操作,但是当数据量增多的时候,每一次连接以及释放数据库都会耗费一定的时间,这个时候...
  • molong1208
  • molong1208
  • 2016年02月25日 19:40
  • 1844

SQLServer的最大连接数 的测试 和数据库连接池

 很多做架构设计、程序开发、运维、技术管理的朋友可能或多或少有这样的困惑:   SQLServer到底支持多少连接数的并发?SQLServer是否可以满足现有的应用吗?现有的技术架构支持...
  • durian_cao
  • durian_cao
  • 2014年06月21日 23:50
  • 3121
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:tomcat 6.0.20 连接池配置 SQL server 2000数据库
举报原因:
原因补充:

(最多只允许输入30个字)