DataSource和JNDI

DataSouce可以被放在本地的机器中,也可以放在远程的服务端,可以通过JNDI来存储和访问它。 下面给出了一个示例,在该示例中我们通过JNDI获取一个DataSource, 然后通过该DataSource获得一个新的连接。

package com.sun.cts.tests.jdbc.help_doc.shu_ju_yuan;
import static org.junit.Assert.fail;

import java.io.File;
import java.io.FileInputStream;
/**************************************************
 *这个例子演示通过JNDI获取一个DataSource, 
 *然后通过该DataSource获得一个新的连接
 **************************************************/
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;
import java.util.Properties;

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

import org.junit.Test;

import com.oscar.jdbcx.Jdbc3SimpleDataSource;

public class JNDITest {

	private Connection con;
	private Statement stmt;
	public String DBUSER = "";
	public String DBPASSWD = "";
	public String DBURL = "";
	public String DBDRIVER = "";

	public void init() {
		Properties prop = new Properties();
		try {

			FileInputStream in = new FileInputStream(
					"." + File.separator + "testFile" + File.separator + "cts_env.properties");
			prop.load(in);
			in.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
		// DBUSER = "sysdba";
		DBUSER = prop.getProperty("DBUSER");
		// DBPASSWD = "szoscar55";
		DBPASSWD = prop.getProperty("DBPASSWD");
		// DBURL = "jdbc:oscar://localhost:2003/osrdb";
		DBURL = prop.getProperty("DBURL");
		// DBDRIVER = "com.oscar.Driver";
		DBDRIVER = prop.getProperty("DBDRIVER");

	}


	public void connect() {
		Context ctx = null;
		DataSource dataSource = null;
		Hashtable env = null;
		// 创建数据源,配置属性
		Jdbc3SimpleDataSource source = new Jdbc3SimpleDataSource();
		source.setUrl(DBURL);
		source.setUser(DBUSER);
		source.setPassword(DBPASSWD);
		// 通过JNDI机制存储DataSource
		env = new Hashtable();
		env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.fscontext.RefFSContextFactory");
		try {
			ctx = new InitialContext(env);
			ctx.bind("DataSource", (Object) source);
		} catch (NamingException nex) {
			fail(nex.getMessage());
		}
		try {
			// 通过JNDI机制获取DataSource
			dataSource = (DataSource) ctx.lookup("DataSource");
			con = dataSource.getConnection();
		} catch (SQLException se) {
			fail(se.getMessage());
		} catch (NamingException ne) {
			fail(ne.getMessage());
		}
	}

	@Test
	public void execute() {
		init(); 
		connect();
		try {
			stmt = con.createStatement();
			// 创建表
			String sql = "CREATE TABLE TEMP" 
						+ "(id INT not NULL, " 
						+ " name varchar(255), " 
						+ " PRIMARY KEY ( id ))";
			stmt.executeUpdate(sql);
			// 插入数据
			sql = "INSERT INTO TEMP VALUES(1,'shentong')";
			stmt.executeUpdate(sql);
			// 获取数据
			ResultSet rs = stmt.executeQuery("SELECT * FROM TEMP");
			while (rs.next()) {
				System.out.println(rs.getInt(1) + " " + rs.getString(2));
			}
			//删除表
			sql="DROP TABLE TEMP ";
			stmt.executeUpdate(sql);
			
			stmt.close();
			con.close();
		} catch (SQLException se) {
			fail(se.getMessage());
		}
	}

	public static void main(String[] args) {
		new JNDITest().execute();
	}

}