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();
}
}