`

JDBC OCI的调用过程

阅读更多

原文:http://hzcaixiao.iteye.com/blog/472119

 

前些天在配置通过OCI的方式连接Oracle中曾进碰到一个关于“java.lang.UnsatisfiedLinkError: no XXX in java.library.path”这么一个问题,这个问题纠结了许久才解决,解决方式参考前面的文章。

趁双休日好好的理解一下产生这个问题的来龙去脉。

先看一段话先:

PATH is the environment variable.

java.library.path is the system properties.

When the java application started, JVM will set java.library.path’s value using PATH’s value.

In java program, it's very difficult to get the value of environment variables, but it's very easy to get/set system properties. Use

System.getProperty("project_root", "..");

System.setProperty("project_root", "..");

 

java.libaray.path 是system properties,在windows系统通常是使用PATH的值,而在Linux上是用LD_LIBRARY_PATH的值。 随便也说一下java.class.path,他是对应于CLASSPATH中的值。

 

那LD_LIBRARY_PATH的值主要是干什么呢?他是来处理非标准路径下的”共享库“的,可以理解成windows 的dll,但在linux下是*.so的文件。

 

说完了基本的概念,再来看看OCI是怎么连接Oracle的,其实OCI是通过JNI(java native interface)的方式来访问Oracle的,请看下图

 

1)我们知道Oracle的驱动是classes12.jar(ojdbc14.jar),这里应该对应着java-class;

2)同样我们在JBOSS启动脚本中设置  JBOSS_NATIVE_DIR="/opt/instantclient_10_2",其实就是将LD_LIBRARY_PATH="/opt /instantclient_10_2",而在这个目录下有大量的*.so文件,这些应该对应native;

3)至于jni-stub是一些存根文件,可以参考一下JNI相关的说明,这里就暂不描述了(有时间可以再深入学习)。

 

分享到:
评论

相关推荐

    JDBC 驱动加载过程分析

    - **JDBC URL**:Oracle的JDBC URL通常以`jdbc:oracle:`开头,后面跟着协议(如thin或oci),然后是服务器信息和端口号,例如`jdbc:oracle:thin:@hostname:port/service_name`。 - **连接池**:在生产环境中,通常...

    oracle11g oci.dll

    OCI 为构建各种语言专用接口(如 Oracle JDBC-OCI、ODP.Net、Oracle 预编译器、Oracle ODBC 和 Oracle C++ Call Interface (OCCI)驱动程序)提供了基础。各种领先的开源接口(如 PHP OCI8 扩展、ruby-oci8、Perl DBD...

    oracle11g连接文件oci.zip

    Oracle提供了一个名为JDBC-OCI的驱动,它是Java Database Connectivity (JDBC) 驱动的一种类型,通过JNI(Java Native Interface)调用底层的OCI接口来实现数据库连接。开发者可以在Java代码中配置JDBC URL,指定oci...

    Oracle Database 11g 第 2 版 (11.2.0.4) JDBC 驱动程序— 包含 JDBC 示例程序。

    2. `classes12.jar`:包含Oracle的非JDBC特定的数据库访问类,如LOB处理、存储过程调用等。 3. `oci.jar`(如果包含):Oracle的本地库,用于JDBC OCI驱动。 示例程序通常包括演示如何初始化数据库连接、执行SQL...

    oci 32bit lib及头文件 c++

    同时,C++的异常处理机制可以用来优雅地处理oci调用可能抛出的错误。 4. OCI环境设置: 在使用oci 32bit lib和头文件之前,确保你的开发环境已经配置了正确的Oracle客户端软件,包括对应的32位Oracle Instant ...

    JDBC驱动 for oracle9i-9.0.1

    - **ocrs12.zip**:OCR(Oracle Call Runtime)可能是Oracle客户端的一部分,包含了运行时组件,这些组件在JDBC OCI驱动中使用,帮助Java应用程序调用Oracle数据库的本地接口。 为了使用Oracle9i - 9.0.1的JDBC驱动...

    Navicat_12.1.0.2.0_Oracle_OCI.dll

    OCI提供了全面的功能,包括SQL执行、事务处理、游标管理、数据类型映射以及高级特性如PL/SQL调用等。在Navicat中,OCI.dll的作用是使Navicat能够通过OCI接口与Oracle数据库进行交互,实现数据的查询、插入、更新和...

    JDBC_Driver

    JDBC驱动的使用不仅限于简单的CRUD(创建、读取、更新、删除)操作,还可以用于复杂的数据操作、存储过程调用、批处理以及数据库连接池的配置等。理解并熟练使用JDBC驱动,是Java开发者进行数据库编程的基础技能。在...

    oracle jdbc jar包

    Oracle JDBC还支持高级特性,如批量更新、预编译的`PreparedStatement`、存储过程调用、游标处理、事务控制等。对于大型企业级应用,理解并熟练使用这些特性是至关重要的。 在开发过程中,注意管理和优化JDBC连接,...

    各版本Oracle JDBC驱动

    这种驱动实际上是一个转换器,将JDBC调用转换为ODBC调用,适合于已配置ODBC数据源的情况。 2. Type 2:部分Java驱动。包含部分Java和部分本地代码,如Oracle Net Services,适用于处理Oracle特定的网络协议。 3. ...

    Oracle12C JDBC 驱动

    Oracle12C JDBC驱动还支持高级特性,如分布式事务处理、批量操作、预编译的SQL语句、游标、存储过程调用、连接池管理等。此外,通过`oracle.jdbc.pool.OracleDataSource` 类可以实现连接池功能,如使用Oracle的...

    如何调用oracle的函数、存储过程

    当你需要在应用程序中调用Oracle函数和存储过程时,通常会使用数据库驱动或ODBC/JDBC。比如在Delphi中(根据提供的文件名`*.dpr`, `*.dfm`等,可能是Delphi项目),你可以使用ADO或Oracle的OCI库。以下是一个Delphi...

    Java连接Oracle数据库的各种方法

    JDBC KPRB主要用于存储过程、触发器等数据库内的Java程序,直接使用当前的数据库会话。 SQLJ是另一种方法,它是一个预编译器,能够将Java源代码中的嵌入式SQL语句转换为Java代码。它的运行机制类似于Oracle的其他...

    VC使用OCI连接操作ORACLE——通过Hook NavicatforOracle得到OCI使用方法

    OCI是Oracle提供的一套API,它允许程序直接与Oracle数据库进行通信,而不必通过中间层的ODBC、JDBC等接口。OCI API为开发者提供了一种低级操作数据库的方式,使得程序可以直接利用数据库服务器的特性和优势。 本...

    java ee连接Oracle数据库的各种方法.doc

    Oracle 提供了三种类型的 JDBC 驱动:JDBC OCI、JDBC Thin 和 JDBC KPRB。JDBC OCI 驱动类似于传统的 ODBC 驱动,需要在客户端机器上安装客户端软件;JDBC Thin 驱动一般用在运行在 WEB 浏览器中的 Java 程序,不...

    各种数据库的jdbc驱动

    使用SQL Server JDBC驱动,开发者可以在Java应用程序中执行SQL Server的查询、存储过程等操作。 2. Oracle JDBC驱动: Oracle提供了两种主要的JDBC驱动: Thin驱动和OCI驱动。 Thin驱动(也称为Type 4)是纯Java...

    oracle JDBC驱动程序

    - JDBC OCI Driver:基于Oracle Call Interface (OCI),需要Oracle客户端库,适合局域网环境。 - JDBC Server Driver:也称为JDBC Network Protocol Driver,用于中间件或服务器端应用。 - JDBC Universal Driver:...

    oracle 11g jdbc

    此外,Oracle JDBC驱动还支持高级特性,如分布式事务、存储过程调用、批处理和JDBC游标等。 Oracle Instant Client的`instantclient_11_2`版本适用于Oracle 11g Release 2数据库。下载后,需要将其路径添加到系统的...

    oracle-jdbc官方文档

    对于存储过程和函数的调用,可以使用`CallableStatement`对象。例如: ```java CallableStatement cstmt = conn.prepareCall("{ ? = call getEmployeeCount() }"); cstmt.registerOutParameter(1, Types.INTEGER); ...

Global site tag (gtag.js) - Google Analytics