初探JNDI

環境:jdk1.7+oracle11g+Tomcat7.0

1.在tomcat中添加oracle數據庫資源

1.1JDBC驅動

將oracle11g的JDBC驅動添加到$CATALINA_HOME/lib目錄下(本人用的是ojdbc14.jar)

1.2配置context.xml

修改$CATALINA_HOME/conf/context.xml文件,context.xml文件會被在這個Tomcat部署的所有web應用加載

<!-- The contents of this file will be loaded for each web application -->
<Context>

    <!-- Default set of monitored resources -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
	
    <!-- Uncomment this to disable session persistence across Tomcat restarts -->
    <!--
    <Manager pathname="" />
    -->
<Resource
			name="jdbc/orcl"
			type="javax.sql.DataSource"
			username="yourusername"
			password="yourpassword"
			driverClassName="oracle.jdbc.OracleDriver"
			url="jdbc:oracle:thin:@192.168.1.208:1521:orcl"
			maxActive="200"
			maxIdle="10"
			maxWait="10000"
		/>


</Context>

2.配置工程中web.xml配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  <display-name>JNDIDemo</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
    <span style="color:#ff0000;"><resource-ref>
        <res-ref-name>jdbc/iqs</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref></span>
</web-app>
3.編寫獲取JNDI數據源類

package cc.dorado.spence.jndi;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.sql.DataSource;

public class JdbcUtil {
	private static DataSource dataSource;
	
	static{
		init();
	}
	
	/**
	 * 私有構造函數
	 */
	private JdbcUtil(){};

	private static void init(){
		try {
			Context initContext = new InitialContext();
			dataSource = (DataSource) initContext.lookup("java:comp/env/jdbc/iqs");
			System.out.println("lookup成功");
		} catch (NamingException e) {
			System.out.println("lookup失敗");
			e.printStackTrace();
		}		
	}
	
	public static Connection getConnection(){
		Connection tmp = null;
		try {
			tmp = dataSource.getConnection();
			System.out.println("獲得連接成功");
		} catch (SQLException e) {
			System.out.println("獲得連接失敗");
			e.printStackTrace();
		}
		return tmp;
	}
	
	public static void closeConnection(Connection conn,Statement stmt,ResultSet rs){
		
		try {
			if(rs!=null){
				rs.close();
				rs=null;
			}
			
			if(stmt!=null){
				stmt.close();
				stmt=null;
			}
			
			if(conn!=null){
				conn.close();
				conn=null;
			}
		} catch (SQLException e) {
			System.out.println("關閉數據庫出錯");
			e.printStackTrace();
		}
		
	}
	
}

package cc.dorado.spence.jndi;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import cc.dorado.spence.jndi.JdbcUtil;

public class SqlUtil {
	
	private Statement stmt;
	private ResultSet rs;
	
	public SqlUtil(){
		try {
			this.stmt = JdbcUtil.getConnection().createStatement();
		} catch (SQLException e) {
			System.out.println("連接失敗");
			e.printStackTrace();
		}
	}
	
	public boolean executeNoQuery(String sql){
		try {
			return stmt.execute(sql);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return false;
	}
	
	public ResultSet executeQuery(String sql){
		this.rs = null;
		try {
			rs=stmt.executeQuery(sql);			
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return rs;
	}
	
	public void close(){
		JdbcUtil.closeConnection(JdbcUtil.getConnection(), this.stmt, this.rs);			
	}

}

4.測試頁面,測試數據庫是否連接成功的代碼一定要再jsp頁面和servlet中進行測試
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="cc.dorado.spence.jndi.SqlUtil" %>
<%@ page import="java.sql.*" %>

<!DOCTYPE HTML>
<html>
  <head>
    <title>JNDI數據源測試</title>
  </head>
  
  <body>
        <%
        	String sql = "SELECT t.yhmc,t.xb FROM BASE_USER t";
        	SqlUtil s = new SqlUtil();
        	ResultSet r = s.executeQuery(sql);		
		try {
			while(r.next()){
				String yhmc = r.getString("yhmc");
				String xb = r.getString("xb");
				
				out.println(yhmc+"---"+xb);
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
        	
        %>
    </body>
</html>

測試結果:admin---男



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章