概念:
JNDI (Java Namespace Diretory Interface)是Java中命名空间和目录协议,有很多的服务器都实现了这个接口,如我们机器上的
FileSystem 文件系统服务器,还有
LDAP (Lightweight Diretory Access Protocol轻量级的目录访问协议)服务器也实现了这个接口.还有很多.可以在网上搜索一下.
我们平常用jdbc连接数据库时都是显式地建立连接,然后获取数据源,现在我们把数据源(DataSource)放在JNDI服务器上,我用文件系统作为JNDI服务器.
1.绑定数据源 ( 用oracle9i作数据库,ojdbc14.jar作数据库驱动程序,fscontext.jar和providerutil.jar作为文件系统JNDI服务器驱动程序)
package jdbc.jndi;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import oracle.jdbc.pool.OracleDataSource;//oracle的数据源类(每个数据库驱动的数据源不同)
public class JndiBind {
public static void main(String[] args) {
// TODO Auto-generated method stub
//设置环境参数
Hashtable env=new Hashtable();
env.put( Context.INITIAL_CONTEXT_FACTORY ," com.sun.jndi.fscontext.RefFSContextFactory ");
env.put( Context.PROVIDER_URL ," file:E:/soft ");//指明用文件系统作为JNDI服务器
Context ctx = null;
try {
//初始化上下文
ctx = new InitialContext(env);
// NamingEnumeration<NameClassPair> ne=ctx.list("");
// NameClassPair nc=null;
// while(ne.hasMore()){
// nc=(NameClassPair)ne.next();
// System.out.println(nc.getName());
// }
OracleDataSource ods=new OracleDataSource();//新建oracle数据源对象
//设置参数
ods.setDriverType("thin");
ods.setUser("openlab");
ods.setDatabaseName("tarena");
ods.setPassword("open123");
ods.setNetworkProtocol("tcp");
ods.setPortNumber(1521);
ods.setServerName("172.16.16.10");
ctx.bind("mydata",ods); //关键的一步(绑定后会在 E:/soft /下面建立一个名字为.bindings的文件)
} catch (NamingException e) {
e.printStackTrace();
}catch(java.sql.SQLException e){
e.printStackTrace();
}
}
}
2.读取数据源
package jdbc.jndi;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import jdbc.util.JdbcUtil;
import oracle.jdbc.pool.OracleDataSource;
public class JndiLookup {
public static void main(String[] args) {
// TODO Auto-generated method stub
//设置环境参数
Hashtable env=new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFactory");
env.put(Context.PROVIDER_URL,"file:E:/soft");
Context ctx=null;
OracleDataSource ods=null;
Statement st=null;
try{
ctx=new InitialContext(env);
ods=(OracleDataSource)ctx.lookup ("mydata"); //关键的一步
}catch(NamingException e){
e.printStackTrace();
}
try{
Connection con=ods.getConnection(); //根据上面从JNDI服务器上得到的数据源建立数据库连接
st=con.createStatement();
ResultSet rs=st.executeQuery("select id,name from yupf_test");
JdbcUtil.printResultSet(rs);
}catch(SQLException e){
e.printStackTrace();
}
}
}
我们平常用jdbc连接数据库时都是显式地建立连接,然后获取数据源,现在我们把数据源(DataSource)放在JNDI服务器上,我用文件系统作为JNDI服务器.
1.绑定数据源 ( 用oracle9i作数据库,ojdbc14.jar作数据库驱动程序,fscontext.jar和providerutil.jar作为文件系统JNDI服务器驱动程序)
package jdbc.jndi;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import oracle.jdbc.pool.OracleDataSource;//oracle的数据源类(每个数据库驱动的数据源不同)
public class JndiBind {
public static void main(String[] args) {
// TODO Auto-generated method stub
//设置环境参数
Hashtable env=new Hashtable();
env.put( Context.INITIAL_CONTEXT_FACTORY ," com.sun.jndi.fscontext.RefFSContextFactory ");
env.put( Context.PROVIDER_URL ," file:E:/soft ");//指明用文件系统作为JNDI服务器
Context ctx = null;
try {
//初始化上下文
ctx = new InitialContext(env);
// NamingEnumeration<NameClassPair> ne=ctx.list("");
// NameClassPair nc=null;
// while(ne.hasMore()){
// nc=(NameClassPair)ne.next();
// System.out.println(nc.getName());
// }
OracleDataSource ods=new OracleDataSource();//新建oracle数据源对象
//设置参数
ods.setDriverType("thin");
ods.setUser("openlab");
ods.setDatabaseName("tarena");
ods.setPassword("open123");
ods.setNetworkProtocol("tcp");
ods.setPortNumber(1521);
ods.setServerName("172.16.16.10");
ctx.bind("mydata",ods); //关键的一步(绑定后会在 E:/soft /下面建立一个名字为.bindings的文件)
} catch (NamingException e) {
e.printStackTrace();
}catch(java.sql.SQLException e){
e.printStackTrace();
}
}
}
2.读取数据源
package jdbc.jndi;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import jdbc.util.JdbcUtil;
import oracle.jdbc.pool.OracleDataSource;
public class JndiLookup {
public static void main(String[] args) {
// TODO Auto-generated method stub
//设置环境参数
Hashtable env=new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,"com.sun.jndi.fscontext.RefFSContextFactory");
env.put(Context.PROVIDER_URL,"file:E:/soft");
Context ctx=null;
OracleDataSource ods=null;
Statement st=null;
try{
ctx=new InitialContext(env);
ods=(OracleDataSource)ctx.lookup ("mydata"); //关键的一步
}catch(NamingException e){
e.printStackTrace();
}
try{
Connection con=ods.getConnection(); //根据上面从JNDI服务器上得到的数据源建立数据库连接
st=con.createStatement();
ResultSet rs=st.executeQuery("select id,name from yupf_test");
JdbcUtil.printResultSet(rs);
}catch(SQLException e){
e.printStackTrace();
}
}
}