设为首页 收藏本站
查看: 709|回复: 0

[经验分享] tomcat 6..0.20 连接池配置 SQL server 2000数据库

[复制链接]

尚未签到

发表于 2016-11-7 07:31:08 | 显示全部楼层 |阅读模式
我的测试是程序是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是否安装成功。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-296721-1-1.html 上篇帖子: SQL 用法 下篇帖子: 书讯 -- Training Kit:SQL Server 2005 实作与维护 I II
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表