欢迎来到天天文库
浏览记录
ID:37525491
大小:178.50 KB
页数:40页
时间:2019-05-24
《在Oracle中调用Java》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Oracle中的Java体系结构 目前,使用Java来扩展存储程序是一种很流行的方法。在使用Java类库处理数据的过程中,PL/SQL是必不可少的一环,这是因为PL/SQL封装了Java类库的数据访问,即任何Java存储对象访问的数据都必须经过PL/SQL。由于本章的所有内容只被最新的数据库版本所支持,因此它独立于本书的其他章节,以下是本章要介绍的内容:● Oracle中的Java体系结构● OracleJDBC的连接类型 ● 客户端驱动器(Client-sidedriver),即JDBC瘦驱动(thindriver) ●
2、 Oracle调用接口驱动器,即中间层胖驱动(middle-tierthickdriver) ● Oracle服务器端内部驱动器(OracleServer-SideInternalDriver),即服务器级的胖驱动● 在Oracle中创建Java类库 ● 创建内部服务器的Java函数 ● 创建内部服务器的Java过程 ● 创建内部服务器的Java对象 ● 创建、装载、删除、使用Java类库时的故障诊断● 映射Oracle类型本章将向您展示一张Oracle中巨大的Java组织结构图,在解释了Java的体
3、系结构之后,您还会看到开发和扩展Java组件的方法。使用Java扩展的原因:我们将使用PL/SQL作为存储Java类库和其他PL/SQL存储程序或匿名块程序之间的接口。我们还会映射Oracle和Java之间的本地数据类型和用户自定义数据类型,以便能定义有效接口和支持JSP(JavaServerPage,Java服务器页面)。1 Oracle中的Java体系结构Oracle9i和10g版本的数据库为开发服务器端或内部Java程序组件提供了一个健壮的体系结构。Java组件采用OO(Object-Oriented,面向对象)的结构,这样的结构非常适合Orac
4、le的对象-关系模型(Object-Relationalmodel)。组件的体系结构实际上就是一个库栈,它包含:● 操作系统的平台依赖性,例如UNIX、LINUX、MicrosoftWindows;● 依赖Oracle数据库的文件和库管理;● 独立于平台的JVM(JavaVirtualMachine,OracleJava虚拟机);● Java内核类库,兼容不同的平台;● Oracle支持的JavaAPI(ApplicationProgrammingInterfaces,应用程序接口),如SQLJ、JDB
5、C和JNDI;● Oracle的PL/SQL存储对象,为SQL和PL/SQL程序之间提供接口,就像服务器端Java类库一样。Oracle和Java库就和普通的文件系统一样来存储和管理应用程序,它们屏蔽了不同操作系统的结构差异和系统限制,从而建立起一个独立于平台的存储、检索和恢复文件的统一处理过程。同时,Java虚拟机为创建有大量文档支持的OO程序提供了一个标准环境。另外,OraclePL/SQL也为其他PL/SQL存储对象以及SQL访问Java库提供了软件包。下图5-1给出了OracleJVM(Java虚拟机)的体系结构。OracleJVM使
6、用两种格式的命名空间:长名称和短名称。长名称和Java中类的命名模式是一样的,我们可以用它本来的命名空间来调用存储Java程序。然而,本章中Java示例的名称都是短名称,并且程序也没有放进程序包中。当然,您完全可以将您的Java程序放进程序包中。Java存储代码的命名空间包括了程序包的整个层次。如果命名空间的长度超过30个字符,Oracle在数据字典视图中就使用哈希命名空间。使用DBMS_JAVA包和LONGNAME函数可以获得完整的命名空间,而如果要获取短名称可以使用DBMS_JAVA程序包和SHORTNAME函数。图5-1 OracleJVM体系结
7、构JVM具有自动内存管理的功能,这意味着我们不需要手动分配和释放内存空间。同时,就像PL/SQL一样,Java也是强类型的语言。因此,强类型和垃圾回收器相结合,对内存进行管理,为Java提供了一个简单的、富有弹性的环境,就像PL/SQL的运行时引擎一样。Java和PL/SQL都是解释语言,因此它们要求JIT(Just-In-Time,即时)编译。Oracle9i中可以对PL/SQL和Java程序进行本地编译,而这实际上是提前编译了。本地编译将PL/SQL和Java程序的字节代码转换成机器可执行的程序代码。因为本地编译消除了即时编译的延时,所以提高了执行
8、速度。但不幸的是,它却要花些时间将解释过的程序编译为机器代码。权衡之下,如果您并不经常改变代码
此文档下载收益归作者所有