使用JNDI连接数据库 (DataSource)ctx.lookup("java:comp/env/jdbc/DBPool")

                  使用JNDI连接数据库

转载:http://blog.sina.com.cn/s/blog_613963d10100stor.html
 

创建一个获取connection的类
 

package com.hstc.db;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.SQLException;

/**
 * @auther 倪万佳
 * @date 2018/11/6 8:52
 */
public class DbFactory
{
    public static Connection getConnection()
    {
        Connection conn = null;
        try
        {
            Context ctx = new InitialContext();
            if (ctx == null)
            {
                throw new Exception("No Context");
            }
            DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/DBPool");
            if (ds != null)
            {
                conn = ds.getConnection();
            }
        }
        catch (NamingException e)
        {
            e.printStackTrace();
        }
        catch (SQLException e)
        {
            e.printStackTrace();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return conn;
    }

    public static void closeConn(Connection conn)
    {
        if (conn != null)
        {
            try
            {
                conn.close();
            }
            catch (SQLException e)
            {
                e.printStackTrace();
            }
        }
    }

}


 

第二步:

配置web.xml文件

  <!-- JNDI -->
  <resource-ref>
    <description>MySQL DB Connection Pool</description>
    <res-ref-name>jdbc/DBPool</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
  </resource-ref>

 

红色字体与Java文件中的必需一致,编译时时通过这些描述符来实现映射

java:comp/env/jdbc/DBPool(虚地址)   ------>    映射描述符   ------>       jdbc/DBPool(实际的地址)

单单这样子还是不够的,在Tomcat中还需要和该web.xml文件建立连接

 

第三步:配置Tomcat目录下conn文件夹中的context.xml配置文件

扫描二维码关注公众号,回复: 3997500 查看本文章

在<Context>

  <Resource
    name="jdbc/DBPool"
    type="javax.sql.DataSource"
    password="123456"
    driverClassName="com.mysql.jdbc.Driver"
    maxIdle="20"
    maxWait="5000"
    username="root"
    url="jdbc:mysql://localhost:3306/mail"
   />

</Context>

 

以上是以MySql作为数据库,如果用其他数据库,改变url和driverClassName即可,但必需保证用户名、密码正确。
 

完成以后,还要将连接数据库的jar包(mysql-connector-java-5.1.7-bin.jar),放在    Tomcat7/lib    目录下,而  Tomcat6/bin  下不需要放此jar包 。

通过JNDI获取连接,程序必须通过Tomcat容器来加载连接,即通过web.xml来建立连接,如果只是在Java代码里面测试,是无法获取到连接的,因此,可以通过JSP(如index,jsp里面)进行如下测试:
 

<%@ page language="java"  pageEncoding="UTF-8"%>
<%@page contentType="text/html; charset=UTF-8"%>
<%@page import="java.sql.*" %>
<%@page import="javax.naming.*" %>
<%@page import="javax.sql.DataSource" %>
<%@page import="com.hstc.db.DbFactory" %>
<head>
    <title>Tomcat7.0 JNDI!</title>
</head>

<body>
This is my JSP page. <br>
JNDI ... <br>
<%
    try {
        DbFactory.getConnection();
        out.println("连接成功...");
    } catch (Exception e) {
        e.printStackTrace();
    }
%>
</body>
</html>


也可以在servlet下进行测试是否成功。

猜你喜欢

转载自blog.csdn.net/xiao__jia__jia/article/details/83781066