使用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配置檔案
在<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下進行測試是否成功。