1. 程式人生 > >使用JNDI連線資料庫 (DataSource)ctx.lookup("java:comp/env/jdbc/DBPool")

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