通过oracle,调用java类,并加载jar包到oracle中以支持java类
如何在Oracle中使用Java存储过程(详解)

如何在Oracle中使用Java存储过程(详解)如何在Oracle中使用Java存储过程(详解)一、如何缔造java存储过程?通常有三种步骤来缔造java存储过程。
1. 使用oracle的sql语句来缔造:e.g. 使用create or replace and compile java source named "" as后边跟上java源程序。
要求类的步骤必须是public static的,威力用于存储过程。
1.SQL> create or replace and compile java source named "javademo1"2. as3. import java.sql.*;4. public class JavaDemo15. {6. public static void main(String[] argv)7. {8. System.out.println("hello, java demo1");9. }10. }11. /12.13.Java 已14.15.缔造。
16.17.SQL> show errors java source "javademo1"18.没有19.20.舛误。
21.22.SQL> create or replace procedure javademo123. 2 as24.3 language java name JavaDemo1.main(/doc/58c87bea102de2bd970 58806.html ng.String[]);25. 4 /26.27.过程已28.30.31.SQL> set serveroutput on32.SQL> call javademo1();33.34.调用35.实现。
36.37.SQL> call dbms_java.set_output(5000);38.39.调用40.实现。
oracle调用JAVA类的方法

oracle调⽤JAVA类的⽅法导⼊jar包在oracle中导⼊需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle⾥⾯写简单的调⽤就可以了, 1、操作系统需要拥有⽀持loadjava命令的jdk。
2、加载jlha.jar包,到oracle数据库中。
操作过程:在dos环境下,输⼊命令: loadjava -r -f -o -user usscares/usscares@usscares jlha.jar注意:jar包要在1.4的环境下编译,项⽬右键 properties java compiler compoler compliance level 1.4 即可否则报version 49 类似的错误调⽤JAVA类oracle调⽤JAVA类的⽅法主要有以下三种:1. ⽤loadjava⽅法装载;可能是调试⽅便,据说这种⽅法⽐较通⽤。
c:\test\hello.javaJava Code1 2 3 4 5 6 7 8 9 10 11 12 13 14 15public class hello{public static void main(String[] args){System.out.println("Hello");hello h = new hello();h.insertM(9);}public static void insertM(int pid){System.out.println("This is the method insertM."); }}C:\test>loadjava -u -v -resolve hello.javaSQL> create procedure prc_hehe as language java name 'hello.main(ng.String[])过程已创建。
SQL> call prc_hehe();调⽤完成。
跟我学Oracle数据库系统管理和实现——应用Java JDBC 调用Oracle数据库存储过程的应用实例

(3)在PLSQL Developer中创建出 相关的存储过程及代 码代码
(4)在MyEclipse开发工具中创建类名称为 JdbcOracleProcedureWithOutResult,程序包名称为 com.px1987.javaoracle.dao.imple的Java程序类
(5)相关的Java程序的核心代码示例
7、Java JDBC调用Oracle存储过程相关函数的代码示例
使用JDBC调用函数的过程与JDBC调用存储过程非常类似, 但由于函数是由返回值的,因此要注册返回参数类型和获得返回 值。如下为调用的代码示例:
注意:使用JDBC调用函数或者过程获取多行查询结果,则需要使 用游标定义返回的数据集。
8、应用JDBC调用带输入参数值的Oracle存储过程的应用示 例
(1)创建数据库表someOneTable
Create table someOneTable (someOneField number(3,0), someTwoField varchar2 (20));
(2)在PLSQL Developer中创建出相关的存储过程及代码代码 1)在PLSQL Developer中应用过程模板创建过程,只需要选 择“文件”菜单中的“新建”——“程序窗口”——“过程”子 菜单 2)将出现存储过程的创建 模板窗口的对话框,在该对话 框的名称栏中输入存储过程的 名称,而在参数栏中输入存储 过程所需要的参数(本示例不 需要参数)。
3)点击对话框中的“确定”按钮,在存储过程的面板中输入 存储过程的代码,最终结果如下图所示。
4)编译该存储过程(产生出存储过程的机器码)
(3)在MyEclipse开发工具中创建类名称为 JdbcOracleProcedureWithOutResult,程序包名称为 com.px1987.javaoracle.dao.imple的Java程序类
论在Oracle中调用Java类

论在Oracle中调用Java类一、写作目的在生产系统中,往往会有一种情况是通过Oracle存储过程来调用Java程序,已达到更优的处理结果。
现就在生产过程中遇到的问题来简介在Oracle中如何调用Java类。
二、Oracle调用Java类简介Oracle数据库的Instance是由SGA和process组成的,在SGA中有6个不同的池,分别为Large pool,Java pool, Shared pool,Redo buffer,Block buffers 和Fixed SGA 。
Java 池(Java pool)是Oracle 8.1.5版本中增加的,目的是支持在数据库中运行Java。
存储过程(stored procedure)允许将运行于数据库层中的持久性逻辑与运行于中间层中的商务逻辑有效地分离开来。
这种分离可以降低整个应用程序的复杂性,并提供其重用性、安全性、性能和可伸缩性。
但是,妨碍存储过程广泛采用的一个主要障碍是不同数据库厂商使用各种专有的、且依赖于数据库的实现语言。
使用基于Java的存储过程可以解决这一问题。
Oracle已经实现了ANSI 标准,这些标准规定了从SQL中将静态Java方法作为过程或函数进行调用的能力。
这种实现被简单地称作"Java存储过程"。
三、生产中遇到的问题在EBS生产环境中,银行给员工发工资时,在进行账户校验以及付款时,是以并发请求的形式调用Java程序,表现出运行效率极低,付一笔款需要2-3分钟,分析原因有:1、并发程序运行时,会多次调用并发管理器,会有耗时。
2、如果此时有多个并发程序在运行,也会降低程序运行效率。
3、生产环境数据量巨大,也会对付款程序运行效率有影响。
解决方案:通过以上分析,原因2和3在生产上是在所难免的,可优化的余地并不是很大,因此,我们决定直接通过oracle调用java类,越过并发程序这一步骤,减少调用并发管理器的时间,从而缩短付款流程的时间,提升付款效率。
oracle触发器调用java类

Guxy亲测Oracle触发器调用java类
1将java程序load进数据库
把JAVA程序LOAD进oracle在$ORACLE_HOME/bin目录下有个LOADJAVA命令,使用这个命令将刚写好的JAVA程序LOAD进数据库。
loadjava -user jkt/jkt@orcl -o -v -f -r c:\ OracleTriggerJava.java
如果成功的话,会打印出来信息提示成功,若程序有编译错误的话,也会提示你错误的地方。
说明:jkt是oracle用户名
2修改权限
修改权限因为我的这个JAVA程序里涉及到对文件的读写操作,所以要先修改权限。
首先以管理员身份登录进数据库
sqlplus / as sysdba
然后执行
执行完毕后,在数据库里执行上述JAVA程序时,就拥有读写该文件的权限了。
3创建存储过程
会提示创建存储过程成功。
4创建trigger
在ORACLE的trigger里调用JAVA程序就完成了,后来的实验证明,每当更新这个表时,
都确实执行了该JAVA程序,完成了对文件的读写。
5附件OracleTriggerJava.java。
通过oracle调用java类并加载jar包到oracle中以支持java类

根据鬼子要求,最初的单纯使用orac le发送和接收mai l被抛弃(上一篇文章描述了具体实现),转而要求使用oracl e调用ja va,并通过jav amail来实现ma il的相关处里。
这里问题就出现了,我编写过ja va,我编写过pl/sql,但是,从来没听说过使用ora cle来调用java。
同事没有一个作过的。
不过,后来察看了相关资料,才知道,这个技术还确实有。
于是做如下的相关记录。
我要做的第一个是把我之前编好的一个压缩功能java类和其需要的jar包文件加载到oracle中,并使其能够被成功调用。
如何压缩文件,稍后处理。
我们先说如何加载java类和jar包到oracle。
首先,压缩功能需要的环境配置:1、操作系统需要拥有支持l oadja va命令的jdk。
2、加载jlha.jar包,到oracl e数据库中。
操作过程:在dos环境下,输入命令:loadja va -r -f -o -user usscar es/usscar es@usscar es jlha.jar这个命令就是oracl e加载jlha.jar包的命令。
编写好需要的,负责压缩的类:Direct oryzi p在其源文件头插入一行:create or replac e and compil e java source nameddirect oryzi p as并执行在数据库commandwindow中,则导入数据库。
既然已经成功导入类到oracle中,那么接下来就是编写函数,使得oracle能够调用此类中的代码:[SQL]view plainc opyprint?1.create or replac e functi on zipblo b (return BLobBLOB,inBlob BLOB,filena me VARCHA R2) return BLOB2. as langua ge java name3. ' s.cares.common.Direct oryZi p.zip(oracle.sql.BLOB,oracle.sql.BLOB,ng.String) return oracle.sql.BLOB ' ;4./5.<PRE>然后就可以编写测试程序,在oralce控制台进行测试:[SQL]view plainc opyprint?1.declar e2.pBlobblob; --原始数据3.rBlobblob; --压缩后的数据4.typrow uss_ro w;5.begin6.select d00307. into pBlob8. from dewey.cysct02919. whered0020= '300'10. ;11.rBlob:= empty_blob();12.delete from dewey.cysct0291 whered0010= 'tst';13.insert into dewey.cysct0291 values('tst','100',rBlob,'','','','');14.select d0030into rBlobfrom dewey.cysct0291 whered0010= 'tst'for update;15.--rBlob:= zipblo b(rBLob,pBlob,'200806251906.pdf');16.rBlob:= zipLis tToBl ob(rBLob,'1,2,3,4,54'||chr(13)||chr(10)||'2,2,3,4,54','200806251906.csv');mit;18.end;19.<PRE></FONT>。
oracle存储过程调用javasource的方法

oracle存储过程调用javasource的方法Oracle存储过程调用Java方法介绍在Oracle数据库中,我们可以使用存储过程来执行一系列的数据库操作。
有时候,我们希望在存储过程中调用Java方法,以实现一些比较复杂的逻辑。
本文将详细介绍在Oracle存储过程中调用Java方法的几种方法。
方法一:使用Java Stored ProcedureJava Stored Procedure是Oracle数据库提供的一种特殊的存储过程类型,在该类型的存储过程中可以直接调用Java方法。
步骤:1.创建Java类,并将其编译成字节码文件(.class文件)。
2.将字节码文件导入到数据库中,可以使用loadjava工具或通过SQL语句执行导入。
3.创建Java Stored Procedure,将其指定为刚导入的字节码文件,并编写实际的存储过程逻辑。
4.在需要的地方调用Java Stored Procedure。
优点:•简单易用,只需创建Java类和Java Stored Procedure即可。
•可以直接访问数据库,无需通过其他方式。
缺点:•必须将Java类编译成字节码文件并导入到数据库中,稍显麻烦。
•Java Stored Procedure在数据库中运行,可能会造成数据库性能的损耗。
方法二:使用外部过程调用Java方法Oracle数据库通过提供外部过程功能,允许我们在存储过程中调用外部的Java方法。
步骤:1.将Java方法包装成Java函数或Java过程,并将其编译成动态加载库文件(.so或.dll文件)。
2.使用CREATE LIBRARY语句在数据库中创建对应的外部库。
3.创建存储过程,将其指定为调用外部库中的函数或过程,并编写实际的存储过程逻辑。
4.在需要的地方调用存储过程。
优点:•可以方便地调用已存在的Java方法,无需修改原有代码。
•外部过程在数据库外部运行,不会对数据库性能造成影响。
Oracle存储过程和java调用

1 存储过程介绍存储过程是指用于特定操作的pl/sql块,是由流控制和sql语句书写的过程。
存储过程经编译和sql优化后存储在数据库服务器中,使用时候只需要调用即可。
2 存储过程的优点1 使用存储过程,可以实现存储过程设计和编码工作分开进行,只要将存储过程名,参数,以及返回信息告诉编码人员即可。
2 使用存储过程可以减少sql注入式攻击,提供系统的安全性。
3 执行存储过程的用户要具有一定的权限才能使用存储过程。
没有数据操作权限的用户只能在系统控制下间接的存取数据。
4 存储过程的代码直接放在了数据库中,一般由客户端直接通过存储过程的名称来进行调用,简化客户端的操作逻辑。
3 存储过程的语法存储过程包含三部分声明,执行部分,异常。
可以有无参数的或带参数的存储过程。
存储过程的定义:Create [or replace] procedure procedure_name[(parameter1[mode] datatype1,parameter2 [model] datatype2…)]IS[As]BeginPl/sql block;End [procedure_name]其中: procedure_name是存储过程的名字,parameter用于指定参数,model用于指定参数模式,datatype用于指定参数类型, IS [AS]用于开始PL/SQL代码块。
注:1,当定义存储过程的参数时,只能指定数据类型,不能指定数据长度。
2,建立存储过程时,既可以指定存储过程的参数,也可以不提供任何参数。
3,存储过程的参数主要有三种类型:输入参数(IN)、输出参数(OUT)、输入输出参数(IN OUT),其中IN用于接收调用环境的输入参数,OUT用于将输出数据传递到调用环境,IN OUT不仅要接收数据,而且要输出数据到调用环境。
4 一个简单的存储过程+调试写一个存储过程--修改其中的数据select count(*) from table1 where name='weiguo' 的查询结果是 count(*)=0如果涉及到两个或以上的输入参数,如下图:5 存储过程和java程序的接口操作5.1 无返回值的存储过程查询数据库-显示5.2 有返回值的存储过程(非列表-单个出参)注意,这里的proc.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
根据鬼子要求,最初的单纯使用oracle发送和接收mail被抛弃(上一篇文章描述了具体实现),转而要求使用oracle调用java,并通过javamail来实现mail的相关处里。
这里问题就出现了,我编写过java,我编写过pl/sql,但是,从来没听说过使用oracle来调用java。
同事没有一个作过的。
不过,后来察看了相关资料,才知道,这个技术还确实有。
于是做如下的相关记录。
我要做的第一个是把我之前编好的一个压缩功能java类和其需要的jar包文件加载到oracle中,并使其能够被成功调用。
如何压缩文件,稍后处理。
我们先说如何加载java类和jar包到oracle。
首先,压缩功能需要的环境配置:
1、操作系统需要拥有支持loadjava命令的jdk。
2、加载jlha.jar包,到oracle数据库中。
操作过程:在dos环境下,输入命令:
loadjava -r -f -o -user usscares/usscares@usscares jlha.jar
这个命令就是oracle加载jlha.jar包的命令。
编写好需要的,负责压缩的类:Directoryzip
在其源文件头插入一行:create or replace and compile java source named directoryzip as
并执行在数据库commandwindow中,则导入数据库。
既然已经成功导入类到oracle中,那么接下来就是编写函数,使得oracle能够调用此类中的代码:
[SQL]view plaincopyprint?
1.create or replace function zipblob (returnBLob BLOB,inBlob BLOB,filename VA
RCHAR2) return BLOB
2. as language java name
3. ' mon.DirectoryZip.zip(oracle.sql.BLOB,oracle.sql.BLOB
,ng.String) return oracle.sql.BLOB ' ;
4./
5.<PRE>
然后就可以编写测试程序,在oralce控制台进行测试:
[SQL]view plaincopyprint?
1.declare
2.pBlob blob; --原始数据
3.rBlob blob; --压缩后的数据
4.typrow uss_row;
5.begin
6.select d0030
7. into pBlob
8. from dewey.cysct0291
9. where d0020 = '300'
10. ;
11.rBlob := empty_blob();
12.delete from dewey.cysct0291 where d0010 = 'tst';
13.insert into dewey.cysct0291 values('tst','100',rBlob,'','','','');
14.select d0030 into rBlob from dewey.cysct0291 where d0010 = 'tst'
for update;
15.--rBlob := zipblob(rBLob,pBlob,'200806251906.pdf');
16.rBlob := zipListToBlob(rBLob,'1,2,3,4,54'||chr(13)||chr(10)||'2,2,3,
4,54','200806251906.csv');
mit;
18.end;
19.<PRE></FONT>。