使用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);
		}
	}
}

 

JDBC (c3p0、dbcp、jndi及不使用连接池)代码 java连接数据库的几种方式 立即下载

相关推荐

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

基于JNDI的应用程序开发 在以TOMCAT为WEB服务器的项目中,用JNDI建立数据库连接池实例.

java 不通过数据源直连数据库操作数据

方法 1、利用 java自带的java.sql.Connection 与sqlserver数据库建立连接。 2、通过Apache的dbutils工具类QueryRunner(org.apache.commons.dbutils.QueryRunner)来获取sqlserver中的对应数据。 具体实现参考上一篇文章:https://blog.youkuaiyun.com/CaptainJava/arti...

CaptainJava的博客 608

虚拟机linux端mysql数据库无法远程访问的解决办法

对于解决虚拟机linux端mysql数据库无法远程访问的办法一种,以下内容我给大家整理了两种解决方案,具体内容如下: 解决方法一: 1、 在控制台执行 mysql -u root -p mysql,CentOS系统提示输入数据库root用户的密码,输入完成后即进入mysql控制台 2、 在mysql控制台执行 GRANT ALL PRIVILEGES ON *.* TO ‘root’@’%’ IDENTIFIED BY ‘MyPassword’ WITH GRANT OPTION; FLUSH PRIVILEGES; 3、 在mysql控制台执行命令中的 ‘root’@’%’ 可以这样理解:

WebLogic配置JNDI数据源以及如何在应用程序中使用配置好的JNDI数据源

点击打开链接

javaofliang的博客 618

基于STM32的智能台灯PWM调光与人体感应融合设计

本文详细介绍了基于STM32单片机的智能台灯设计方案,重点讲解了PWM调光技术与人体感应模块的融合实现。通过STM32的高级定时器产生精准PWM信号控制LED亮度,结合红外传感器实现人来灯亮、人走灯灭的智能体验,同时集成光敏传感实现环境自适应调光,打造高效节能的智能照明解决方案。

threejs5artist的博客 824

InstallShield 打包 自定义安装依赖环境

用InstallShield2020打包.NetFramework4.5程序,程序需要集成Access数据库,必须安装AccessDatabaseEngine引擎,而InstallShield中自带的依赖项不包含该项,所以自定义集成了该依赖项。

zhaoziyu2020的博客 1128

使用jndi遇到的一些问题

今天使用JNDI时遇到了一些问题,现把它写出来,方便以后学习。环境:Tomcat 5.5,mysql5.0,jdk1.6,spring,struts,hibernate。 application-db.xml文件中dataSource开始采用的是commons-dbcp连接池方式,改成JNDI方式,修改如下: 1.修改application-db.xml,改为JNDI方式 [code="...

rubylover 437

【三维重建】基于多视角图像的三维重建

基于多视角图像的三维重建》

m0_64446860的博客 8759

配置多数据源后,springboot 日志中不输出sql 解决方案

最近将项目配置多数据源后,突然发现sql语句在日志中无输出了,一开始以为log4j2.xml 配置出问题了,无论怎么配置修改(试了网上n多方法,只修改log4j2.xml 文件),不能正确的输出日志。 最终怀疑是 添加多数据源导致的。 最后,看到一个说在配置文件中增加配置如下: application.yml 文件中配置如下: logging: level: com.xxx.b...

u012149894的专栏 6042

【附代码】SSVEP解码算法 - 扩展典型相关分析(eCCA)

本文主要对SSVEP解码算法-eCCA进行复现和测试。本文提供程序的所有代码,只要在Matlab上即可运行。读者可以根据程序自主调整,方便学习以及初学者更好地了解SSVEP的经典算法。

计算机小白 1336

手把手教你学Simulink--基于Simulink的移相全桥DC-DC变换器仿真建模

特点高效性:通过实现零电压开关(ZVS)减少开关损耗。电气隔离:使用变压器提供输入输出间的电气隔离。适用于中高功率应用:如服务器电源、工业电源等。挑战控制复杂度:精确控制相位差以实现软开关。元件选择:合适的电感、电容值对于性能至关重要。动态响应:快速响应负载变化,保持稳定的输出电压。首先明确要模拟的任务内容。设计一个能够支持特定输入输出电压比的PSFB变换器。根据工作频率和谐振元件值确定合适的电路参数。实现有效的控制策略来维持输出电压稳定,并实现软开关。

MHD0815的博客 520

每章一篇博客带你拿下吉林大学JAVAEE期末(五:JNDI)

吉林大学javaee第六章JNDI的简单介绍。

stn54999的博客 1485

ASPICE(Automotive SPICE)流程落地,研发管理工具自研,如何从量化数据体现研发效率提升的

摘要: ASPICE流程显著提升研发效率,主要体现在质量、成本和时间三个维度。关键量化指标包括:缺陷率降低30%-60%,维护工作量减少28%,研发周期缩短10%-20%,需求变更率降低58%,代码评审效率提升300%。初期开发成本虽增加9%,但长期回报率高。核心方法包括缺陷预防前移、需求精准管理和流程标准化与自动化。建立量化度量体系需覆盖缺陷密度、需求稳定性、进度偏差等指标,并依托工具链支持数据收集。实施ASPICE是短期投入换取长期质量提升和成本优化的高效投资。

汽车软件开发 183

《深入理解mybatis原理》 Mybatis数据源与连接池

对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题。本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池。     本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的。紧接着将分类介绍UNPOOLED、POOLED和JNDI类型的数据源组织;期间我们会重点讲解POOLED类型的数据源和其实现的

天下布武之信长的专栏 430

Experion PKS系列开发:I_O模块_ExperionPKS与第三方I-O模块的集成

通过上述步骤,可以成功将第三方I/O模块集成到Honeywell Experion PKS系统中,实现对现场设备的监视和控制。集成过程中需要注意选择合适的第三方模块,配置正确的通信参数,编写正确的控制逻辑,并进行充分的测试,以确保系统的稳定性和可靠性。不同的通信协议(如Modbus、Profibus、Ethernet/IP、CANopen、OPC UA)有其独特的配置和编程方法,但总体流程相似。在实际应用中,根据项目需求选择合适的协议和模块,可以有效提高系统的灵活性和适应性。

zhubeibei168的博客 1102

博途PLC模糊PID控制(量化因子和比例因子)

参数"量化因子和比例因子",都是为了对清晰值进行比例变换而设置的,其作用是使变量按一定比例进行放大或缩小,以便和我们的模糊论域相匹配完成一一映射。这种变换对整个系统的工作性能也是有影响的。(其实相当于额外引入了比例作用,所以说模糊PID的调节是个系统工程)。限于本人能力,文中难免出现错误和不足,欢迎大家批评和指正。博途PLC的模糊PID控制完整算法可以参看下面这篇文章博途PLC模糊PID控制详解(SCL完整源代码+参数)_RXXW_Dor的博客-优快云博客。......

RXXW_Dor的博客 5269

JavaWeb:Tomcat下配置数据源连接数据库

习惯了以硬编码的形式在程序中建立数据库连接,用完就在finally语句块中close一下就结束了。对于重视数据库连接数的应用来说,这样子做会耗费大量的时间和数据库资源,而且硬编码的形式也不甚灵活。   在Tomcat这个Java Web容器下通过配置DataSource(数据源)对象可以解决上面所述的问题。JDBC中的javx.sql.DataSource接口负责建立于数据库的连接,程序中直接

1775

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

《mybatis》2 数据库连接池

参考博客:https://blog.youkuaiyun.com/luanlouis/article/details/37671851 1 底层连接数据库:实际上用的也是java.sql.DriverManager 2 数据源分为3种:不使用连接池的、使用连接池的、用JNDI方式的 (1)不使用连接池的数据源:每次调用getConnection()都会创建一个Connection对象,创建Conne...

xxx 252

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java使用c3p0连接数据库

c3p0是一个开源的JDBC连接池,实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展,使用它的开源项目有Spring、Hibernate等。 c3p0和dbcp的区别:dbcp没有自动回收空闲连接功能,c3p0有该功能。 为什么使用连接池:在一般项目中操作数据库,每一次的操作都是建立一个连接,操作完成后才稀放连接,而JDBC不会保持连接的持续,超过一定的时间会稀放该连接。而...

田野上的风筝 6166

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

java 连接 websphere_java – 如何使用给定的JNDI名称连接到Websphere数据源?

我正在使用Websphere Portal 7.0并创建一个带RAD 8.0的portlet。我的portlet正在尝试建立到远程服务器的db2连接。我在本地编写了一个java程序来对服务器进行基本的JDBC连接,并从表中获取记录。代码工作正常但是,当我将代码添加到我的portlet以及db2jcc4.jar时,连接不起作用。我使用的基本:Connection connection = Drive...

weixin_30336075的博客 420

Tomcat下配置JNDI数据库连接池并使用

【声明:转自 Liver's Java】 一、配置JNDI数据源 这一步有几种配置方式,比如直接修改Tomcat/conf/server.xml文件,但这样修改是全局的,个人不太喜欢这样的方式,本着的原则是能不全局就不全局,以保证项目能够尽量少的影响到其他项目,尽量少的进行修改。因此这里才用局部配置的方式。 把下边的代码保存为context.xml文件,并放到WebRoot/META-INF

麻里酱的程序猿之路 490

tomcat6.0.32配置jndi数据源失败

tomcat6.0.32配置jndi数据源失败 META-INF/context.xml内容如下: 1 <?xml version="1.0" encoding="UTF-8"?> 2 <!-- 3 Licensed to the Apache Software Foundation (ASF) under one or more 4 contributor...

weixin_30537391的博客 262

使用JNDI连接数据库

JNDI是 Java 命名与目录接口(Java Naming and Directory Interface),在J2EE规范中是重要的规范之一,不少专家认为,没有透彻理解JNDI的意义和作用,就没有真正掌握J2EE特别是EJB(Enterprise Java Bean)的知识。 那么,JNDI到底起什么作用? 要了解JNDI的作用,我们可以从“如果不用JNDI我们怎样做?用了JNDI

我是一只IT小小鸟 845

Jboss 服务器 JNDI 配置数据源连接数据库

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34104341的博客 208
上一篇: Eclipse导出JavaDoc中文乱码问题解决
下一篇: DIY CHM文档
coolservices
博客等级 码龄19年 2粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值