用JNDI绑定DataSource

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

}

你可能感兴趣的:(数据库,数据库驱动程序,服务器,数据库,null,oracle,string)