`
coolbi
  • 浏览: 86347 次
  • 性别: Icon_minigender_1
  • 来自: 重庆&南京
社区版块
存档分类
最新评论

使用JNDI连接数据库(不使用数据源)

阅读更多

今天项目经理让我用JNDI连接数据库,我问他,要用到数据源吗?他说不用。

当时很是疑惑,用JNDI,为什么不用数据源呢?

后来上网找了些资料,总想是做出来了,现在总结如下:

新建类:OracleJNDI

import java.sql.SQLException;

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

import oracle.jdbc.pool.OracleDataSource;

public class OracleJNDI
{

	public OracleJNDI() throws SQLException
	{
		super();
	}
	/**
	 * 使用sun提供的com.sun.jndi.fscontext.RefFSContextFactory作为JNDI服务器,
	 * 其实这是使用文件系统来存储JNDI对象
	 * @param args
	 * @throws NamingException
	 * @throws SQLException
	 */
	public static void main(String[] args) throws NamingException, SQLException
	{
		
		//Properties ps = new Properties();
		//为系统设置jndi工厂
		System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
				"com.sun.jndi.fscontext.RefFSContextFactory");
		//指定JNDI URL
		System.setProperty(Context.PROVIDER_URL, "file:JNDI_REF");
		Context ctx = new InitialContext();
		
		//OracleDataSoruce对象,它已经实现了javax.naming.Referencable
		OracleDataSource ojndi = new OracleDataSource();
		
		//设置相关数据库属性
		ojndi.setDatabaseName("DXS");
		ojndi.setURL("jdbc:oracle:thin:@localhost:1521:dflcrm");
		ojndi.setUser("smp_dba");
		ojndi.setPassword("123");
		ojndi.setDescription("JDBC  Datasource  connection.");
		
		//重新绑定OJNDI对象
		ctx.rebind("ojndi", ojndi);
		System.out.println("bind successful");
		//关闭
		ctx.close();
	}

}

 测试类:

import java.sql.Connection;
import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;

import oracle.jdbc.pool.OracleDataSource;

public class Lookup
{
	/**
	 * 这是一个演示了如果查找JNDI的方法,注意以下二点:
	 * 1.确保系统属性中存在Context.INITIAL_CONTEXT_FACTORY和Context.PROVIDER_URL(这不是必须的,如果没有则2)
	 * 2.如果没有设置系统属性,那么必须由相关的有这二个变量的HashTable构造Context对象 下面的演示采用第二种实现
	 * 
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception
	{
		//构造HashTable对象
		Properties ps = new Properties();
		ps.setProperty(Context.INITIAL_CONTEXT_FACTORY,
				"com.sun.jndi.fscontext.RefFSContextFactory");
		ps.setProperty(Context.PROVIDER_URL, "file:JNDI_REF");
		//由HashTable对象构造Context对象
		Context ctx = new InitialContext(ps);
		//查找"OJNDI"
		OracleDataSource dataSource = (OracleDataSource) ctx.lookup("ojndi");
		System.out.println("dataSource: " + dataSource);
		Connection conn = dataSource.getConnection();
		System.out.println(conn);
	}

}

 

junit测试类:

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

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

import junit.framework.Assert;
import junit.framework.TestCase;
import oracle.jdbc.pool.OracleDataSource;

public class JndiTest extends TestCase
{
	// 测试JNDI
	public void testJndi()
	{
		try
		{
			Properties ps = new Properties();
			ps.setProperty(Context.INITIAL_CONTEXT_FACTORY,
					"com.sun.jndi.fscontext.RefFSContextFactory");
			ps.setProperty(Context.PROVIDER_URL, "file:JNDI_REF");
			Context ctx = new InitialContext(ps);
			OracleDataSource dataSource = (OracleDataSource) ctx
					.lookup("ojndi");
			Connection conn = dataSource.getConnection();
			

			// 断言
			Assert.assertNotNull(ctx);
			Assert.assertNotNull(dataSource);
			Assert.assertNotNull(conn);
			
			String sql = "create table lcjtest(id int,name varchar(20))";
			
			String sql1 = "insert into lcjtest values(1,'test1')";
			String sql2 = "insert into lcjtest values(2,'test2')";
			String sql3 = "insert into lcjtest values(3,'test3')";
			String sql4 = "insert into lcjtest values(4,'test4')";
			
			String sql5 = "select * from lcjtest";
			
			String sql6 = "drop table lcjtest";
			
			Statement stmt = conn.createStatement();
			
			stmt.execute(sql);
			
			stmt.addBatch(sql1);
			stmt.addBatch(sql2);
			stmt.addBatch(sql3);
			stmt.addBatch(sql4);
			
			stmt.executeBatch();
			
			ResultSet rs = stmt.executeQuery(sql5);
			int i = 1;
			while(rs.next())
			{
				Assert.assertEquals("test"+i, rs.getString("name"));
				i++;
			}
			
			stmt.execute(sql6);
			rs.close();
			stmt.close();
			conn.close();
			ctx.close();
		}
		catch (NamingException e)
		{
			e.printStackTrace();
			Assert.assertNull(e);
		}
		catch (SQLException e)
		{
			e.printStackTrace();
			Assert.assertNull(e);
		}
	}
}

 

分享到:
评论
2 楼 sww176 2010-04-01  
sww176 写道
请问 file:JNDI_REF
的内容是什么?
像这种直接连接,Context.PROVIDER_URL应该怎么写,先谢谢了。


额,解决了

建个JNDI_REF目录存储jndi就行了,开始建的文件,汗。。。
1 楼 sww176 2010-04-01  
请问 file:JNDI_REF
的内容是什么?
像这种直接连接,Context.PROVIDER_URL应该怎么写,先谢谢了。

相关推荐

    javaJNDI连接数据库

    #### 使用JNDI连接数据库 本节将详细介绍如何使用JNDI在Java应用中配置并连接到数据库。 ##### 配置Tomcat服务器 1. **修改`context.xml`文件:** 在Tomcat的安装目录下的`conf`文件夹中,找到`context.xml`文件,...

    JNDI连接数据库配置

    ### JNDI连接数据库配置详解 #### 一、引言 在Java开发中,JNDI(Java Naming and Directory Interface)是一种广泛使用的API,它允许Java应用程序查找并定位远程对象和服务,包括数据库连接等资源。本文将详细...

    用jndi操作数据库小实例

    在JNDI中,数据源通常以全局唯一的名字注册,应用程序可以通过名字获取到这个数据源对象,然后通过它来创建和管理数据库连接。 在"用jndi操作数据库小实例"中,我们将学习以下步骤: 1. **配置数据源**:在应用...

    jndi连接数据库配置方法

    JNDI连接数据库的优点在于它能够实现数据库连接的统一管理和动态配置,使得在多应用环境中更容易管理和切换数据库。此外,由于数据源通常使用连接池,可以有效提高系统性能,减少数据库连接的创建和销毁开销。常见...

    tomcat6.0JNDI连接数据库.

    总结一下,Tomcat 6.0通过JNDI连接数据库的步骤包括:配置`server.xml`中的数据源、在应用的`web.xml`中声明资源引用,以及在Java代码中使用JNDI查找来获取数据库连接。在实际操作中,一定要确保驱动兼容、配置正确...

    用JNDI建立数据库连接池实例

    这段代码首先创建了一个`InitialContext`对象,然后通过`lookup`方法找到JNDI名称为“java:comp/env/jdbc/myDataSource”的数据源,最后获取数据库连接。 总结来说,通过JNDI在Tomcat中设置数据库连接池,可以实现...

    JNDI数据库连接池

    为了配置JNDI连接池以连接到MySQL数据库,我们需要在Tomcat的`context.xml`或`server.xml`文件中添加必要的配置,包括数据源的JNDI名称、数据库URL、用户名、密码、驱动类名等。 例如,我们可以创建一个名为`...

    c3p0连接数据库及jndi链接例子

    总结一下,C3P0连接数据库涉及到创建数据源配置、设置数据库连接参数、获取和释放连接。而通过JNDI,我们可以将数据源注册到应用服务器,使得应用可以通过统一的名称查找和使用数据源,增强了系统的可移植性和可管理...

    intellij idea使用tomcat开发时自动部署jndi数据源

    在这个场景中,“intellij idea使用tomcat开发时自动部署jndi数据源”是一个重要的知识点,它涉及到如何在IDE中配置和管理数据库连接,以便于在应用运行时动态地查找和使用数据源。 JNDI(Java Naming and ...

    jndi 数据库连接池 & 监听

    2. **查找数据源**:在Java代码中,使用`InitialContext`查找JNDI上下文中的数据源,例如: ```java Context initialContext = new InitialContext(); DataSource dataSource = (DataSource) initialContext....

    JNDI 三种连接数据库方法

    在本教程中,我们将深入探讨使用JNDI连接数据库的三种方法。 ### 1. 配置在应用服务器中的JNDI数据源 大多数企业级应用服务器(如Tomcat、JBoss、WebLogic等)都支持预配置的数据源,这些数据源可以通过JNDI名进行...

    DBCP 数据库连接池JNDI连接 学习笔记

    这篇“DBCP 数据库连接池JNDI连接 学习笔记”主要探讨了如何结合JNDI(Java Naming and Directory Interface)来使用DBCP进行数据库连接管理。JNDI提供了一种标准的方式来查找和绑定资源,如数据源,在企业级应用中...

    java 采用JNDI访问数据库(三种方法)

    2. **编程查找**:在Java代码中,使用`InitialContext`查找数据源,然后调用`getConnection()`方法获取数据库连接。 ```java import javax.naming.InitialContext; import javax.sql.DataSource; public class ...

    kettler连接oracle 12c数据库(目前只能用JNDI)

    JNDI 连接方式不仅提供了一个更为灵活的数据源管理机制,还能够更好地适应 Oracle 12c 的新特性。需要注意的是,在实际应用过程中,还需结合具体的业务场景和技术架构,对上述步骤进行适当的调整和完善。

    jndi数据源与数据池

    本篇将深入探讨JNDI(Java Naming and Directory Interface)数据源、数据库连接池以及它们在`Context.xml`和`web.xml`配置文件中的设置。 首先,理解JNDI数据源。JNDI是一种标准接口,允许Java应用查找和绑定命名...

    jndi数据源的连接方法

    在Java应用中,JNDI(Java Naming and Directory Interface)数据源是一种常用的方式来管理数据库连接。...提供的"配置数据源jndi连接方法.doc"文件应该包含了详细的步骤和示例,有助于你更好地理解和实施这一过程。

    JNDI配置数据源在java web开发中的使用

    本篇文章将详细介绍如何使用JNDI配置数据源进行数据库连接。 1. **JNDI概述** JNDI提供了一种统一的接口来访问命名和目录服务,比如DNS、LDAP等。在Java Web环境中,它常用来查找和绑定应用程序所需的资源,如数据...

    配置 JNDI 数据源

    1. Spring配置:在Spring的配置文件(如applicationContext.xml)中,不直接定义DataSource,而是声明一个Bean,使用JNDI查找来获取数据源。例如: ```xml <bean id="dataSource" class="org.springframework.jndi....

    apusic数据库连接攻略

    "apusic数据库连接攻略" apusic数据库连接攻略是apusic文件中的一种数据库连接策略,...apusic数据库连接攻略是apusic文件中的一种数据库连接策略,通过配置数据源、资源引用和程序调用,实现了数据库连接的功能。

Global site tag (gtag.js) - Google Analytics