lenf 发表于 2013-3-13 09:33:25

Tomcat6.0的JNDI使用方法(连接池)

最近有项目用到JNDI,为了方便的更改数据库和环境,好吧,那我就来学习下,顺便分享下方法,网上的方法乱七八糟,看的我眼都晕了。以下我提供的方法绝对是我本人试过可用的,要不发上来被你看到了,估计会被你骂。囧……先让大家看下我的项目图:
一、我们先找到tomcat6.0conf目录下的context.xml更改里面的内容:



[*]<?xml version='1.0' encoding='utf-8'?>   
<Context>   
<WatchedResource>WEB-INF/web.xml</WatchedResource>   
    <Resource name="jdbc/mysqldb"      
       auth="Container"   
       type="javax.sql.DataSource"   
       driverClassName="com.mysql.jdbc.Driver"   
       url="jdbc:mysql://localhost:3306/test"   
       username="root"   
       password="123456"   
       maxActive="4"   
       maxIdle="2"   
       maxWait="-1"/>   
<ResourceLink global="mysqldb" name="mysqldb" type="javax.sql.DataSource"/>   
</Context>



其他的全删掉,只要替换成我上面这样的就可以。参数解释:name 为当前数据源JNDI的名字,可以随意设定;auth 为验证方式;type 资源类型;driverClassName 为Oracle驱动引用;maxActiv 为连接池最大激活的连接数,设为0表示无限制;maxIdle 为连接池最大空闲的连接数,数据库连接的最大空闲时间。超过空闲时间,数据库连接将被标记为不可用,然后被释放。设为0表示无限制;maxWait 为连接最大的等待时间,单位毫秒,如果超过此时间将接到异常。设为-1表示无限制;username 为oracle数据库的一个用户名;password 为username的密码;url 为连接oracle的连接地址;
二、新建个项目JNDIPro,名字就叫这个啦。
三、里面建个类ConnectionPool.java



[*]package com.shyy.jndi;   
   
import java.sql.Connection;   
   
import javax.naming.Context;   
import javax.naming.InitialContext;   
import javax.sql.DataSource;   
   
public class ConnectionPool {   
    private static Connection conn;   
      
    public static Connection getConn(){   
      try{   
            Context ctx = new InitialContext();   
            DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/mysqldb");   
            conn = ds.getConnection();   
      }catch(Exception e){   
            e.printStackTrace();   
      }   
      return conn;   
    }   
}   


四、网上有的人说要配置下项目的WebRoot/web-inf下的web.xml文件,如下,我自己没有配置也运行成功了(大家可以省略,如果不行再加上,我不敢保证所有的环境都和我的一样)在<web-app></web-app>中间配置,
<resource-ref>      
<description>DB Connection test</description>      
<res-ref-name>jdbc/mysqldb</res-ref-name>      
<res-type>javax.sql.DataSource</res-type>      
<res-auth>Container</res-auth>      
</resource-ref>   



五、现在我们来写个JSP页面测试下,如下代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"   
    pageEncoding="UTF-8"%>   
<%@ page import="com.shyy.jndi.ConnectionPool,java.sql.Connection,java.sql.*" %>   
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">   
<html>   
<head>   
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">   
<title>测试JNDI连接</title>   
</head>   
<body>   
<%   
ConnectionPool conn = new ConnectionPool();   
Connection connconns = conn.getConn();   
if(null!=conns){   
    out.println("数据库连接状态:<b>OK</b><hr />");   
    PreparedStatement pst = conns.prepareStatement("SELECT * FROM USER_INFO");   
    ResultSet rs = pst.executeQuery();   
    while(rs.next()){   
      int id =rs.getInt("ID");   
      String name = rs.getString("NAME");   
      String sex = rs.getString("SEX");   
      String telPhone = rs.getString("TELPHONE");   
      out.println("<b>id:</b>"+id+"<br /><b>姓名:</b>"+name+"<br /><b>性别:</b>"+sex+"<br /><b>手机号:</b>"+telPhone+"<hr />");   
    }   
}else{   
    out.println("数据库连接状态:NO");   
}   
%>   
</body>   
</html>   



六、启动tomcat,运行结果如下:


OK,大功告成。不行的同学仔细对照上面的步骤看下,反正我是成功啦。

q29191 发表于 2013-3-17 17:21:22

比我有才的都没我帅,比我帅的都没我有才!

gxh1968 发表于 2013-5-16 11:51:09

此地禁止大小便,违者没收工具。

jxdiscuz 发表于 2013-5-17 19:24:42

为中华而努力读书!一包中华好多钱啊~~~

741057228我QQ 发表于 2013-5-19 00:19:37

睡眠是一门艺术——谁也无法阻挡我追求艺术的脚步!

smith88 发表于 2013-5-20 09:06:45

heshao2005 发表于 2013-5-21 20:31:53

为中华而努力读书!一包中华好多钱啊~~~
页: [1]
查看完整版本: Tomcat6.0的JNDI使用方法(连接池)