使用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配置文件
![](/qrcode.jpg)
在<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下进行测试是否成功。