用JNDI连接数据库

新建类:OracleJNDI

Java代码   收藏代码
  1. import java.sql.SQLException;  
  2.   
  3. import javax.naming.Context;  
  4. import javax.naming.InitialContext;  
  5. import javax.naming.NamingException;  
  6.   
  7. import oracle.jdbc.pool.OracleDataSource;  
  8.   
  9. public class OracleJNDI  
  10. {  
  11.   
  12.     public OracleJNDI() throws SQLException  
  13.     {  
  14.         super();  
  15.     }  
  16.     /** 
  17.      * 使用sun提供的com.sun.jndi.fscontext.RefFSContextFactory作为JNDI服务器, 
  18.      * 其实这是使用文件系统来存储JNDI对象 
  19.      * @param args 
  20.      * @throws NamingException 
  21.      * @throws SQLException 
  22.      */  
  23.     public static void main(String[] args) throws NamingException, SQLException  
  24.     {  
  25.           
  26.         //Properties ps = new Properties();  
  27.         //为系统设置jndi工厂  
  28.         System.setProperty(Context.INITIAL_CONTEXT_FACTORY,  
  29.                 "com.sun.jndi.fscontext.RefFSContextFactory");  
  30.         //指定JNDI URL  
  31.         System.setProperty(Context.PROVIDER_URL, "file:JNDI_REF");  
  32.         Context ctx = new InitialContext();  
  33.           
  34.         //OracleDataSoruce对象,它已经实现了javax.naming.Referencable  
  35.         OracleDataSource ojndi = new OracleDataSource();  
  36.           
  37.         //设置相关数据库属性  
  38.         ojndi.setDatabaseName("DXS");  
  39.         ojndi.setURL("jdbc:oracle:thin:@localhost:1521:dflcrm");  
  40.         ojndi.setUser("smp_dba");  
  41.         ojndi.setPassword("123");  
  42.         ojndi.setDescription("JDBC  Datasource  connection.");  
  43.           
  44.         //重新绑定OJNDI对象  
  45.         ctx.rebind("ojndi", ojndi);  
  46.         System.out.println("bind successful");  
  47.         //关闭  
  48.         ctx.close();  
  49.     }  
  50.   
  51. }  

 测试类:

Java代码   收藏代码
  1. import java.sql.Connection;  
  2. import java.util.Properties;  
  3.   
  4. import javax.naming.Context;  
  5. import javax.naming.InitialContext;  
  6.   
  7. import oracle.jdbc.pool.OracleDataSource;  
  8.   
  9. public class Lookup  
  10. {  
  11.     /** 
  12.      * 这是一个演示了如果查找JNDI的方法,注意以下二点: 
  13.      * 1.确保系统属性中存在Context.INITIAL_CONTEXT_FACTORY和Context.PROVIDER_URL(这不是必须的,如果没有则2) 
  14.      * 2.如果没有设置系统属性,那么必须由相关的有这二个变量的HashTable构造Context对象 下面的演示采用第二种实现 
  15.      *  
  16.      * @param args 
  17.      * @throws Exception 
  18.      */  
  19.     public static void main(String[] args) throws Exception  
  20.     {  
  21.         //构造HashTable对象  
  22.         Properties ps = new Properties();  
  23.         ps.setProperty(Context.INITIAL_CONTEXT_FACTORY,  
  24.                 "com.sun.jndi.fscontext.RefFSContextFactory");  
  25.         ps.setProperty(Context.PROVIDER_URL, "file:JNDI_REF");  
  26.         //由HashTable对象构造Context对象  
  27.         Context ctx = new InitialContext(ps);  
  28.         //查找"OJNDI"  
  29.         OracleDataSource dataSource = (OracleDataSource) ctx.lookup("ojndi");  
  30.         System.out.println("dataSource: " + dataSource);  
  31.         Connection conn = dataSource.getConnection();  
  32.         System.out.println(conn);  
  33.     }  
  34.   
  35. }  

 

junit测试类:

Java代码   收藏代码
  1. import java.sql.Connection;  
  2. import java.sql.ResultSet;  
  3. import java.sql.SQLException;  
  4. import java.sql.Statement;  
  5. import java.util.Properties;  
  6.   
  7. import javax.naming.Context;  
  8. import javax.naming.InitialContext;  
  9. import javax.naming.NamingException;  
  10.   
  11. import junit.framework.Assert;  
  12. import junit.framework.TestCase;  
  13. import oracle.jdbc.pool.OracleDataSource;  
  14.   
  15. public class JndiTest extends TestCase  
  16. {  
  17.     // 测试JNDI  
  18.     public void testJndi()  
  19.     {  
  20.         try  
  21.         {  
  22.             Properties ps = new Properties();  
  23.             ps.setProperty(Context.INITIAL_CONTEXT_FACTORY,  
  24.                     "com.sun.jndi.fscontext.RefFSContextFactory");  
  25.             ps.setProperty(Context.PROVIDER_URL, "file:JNDI_REF");  
  26.             Context ctx = new InitialContext(ps);  
  27.             OracleDataSource dataSource = (OracleDataSource) ctx  
  28.                     .lookup("ojndi");  
  29.             Connection conn = dataSource.getConnection();  
  30.               
  31.   
  32.             // 断言  
  33.             Assert.assertNotNull(ctx);  
  34.             Assert.assertNotNull(dataSource);  
  35.             Assert.assertNotNull(conn);  
  36.               
  37.             String sql = "create table lcjtest(id int,name varchar(20))";  
  38.               
  39.             String sql1 = "insert into lcjtest values(1,'test1')";  
  40.             String sql2 = "insert into lcjtest values(2,'test2')";  
  41.             String sql3 = "insert into lcjtest values(3,'test3')";  
  42.             String sql4 = "insert into lcjtest values(4,'test4')";  
  43.               
  44.             String sql5 = "select * from lcjtest";  
  45.               
  46.             String sql6 = "drop table lcjtest";  
  47.               
  48.             Statement stmt = conn.createStatement();  
  49.               
  50.             stmt.execute(sql);  
  51.               
  52.             stmt.addBatch(sql1);  
  53.             stmt.addBatch(sql2);  
  54.             stmt.addBatch(sql3);  
  55.             stmt.addBatch(sql4);  
  56.               
  57.             stmt.executeBatch();  
  58.               
  59.             ResultSet rs = stmt.executeQuery(sql5);  
  60.             int i = 1;  
  61.             while(rs.next())  
  62.             {  
  63.                 Assert.assertEquals("test"+i, rs.getString("name"));  
  64.                 i++;  
  65.             }  
  66.               
  67.             stmt.execute(sql6);  
  68.             rs.close();  
  69.             stmt.close();  
  70.             conn.close();  
  71.             ctx.close();  
  72.         }  
  73.         catch (NamingException e)  
  74.         {  
  75.             e.printStackTrace();  
  76.             Assert.assertNull(e);  
  77.         }  
  78.         catch (SQLException e)  
  79.         {  
  80.             e.printStackTrace();  
  81.             Assert.assertNull(e);  
  82.         }  
  83.     }  
  84. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值