通过oracle,调用java类,并加载jar包到oracle中以支持java类

合集下载

如何在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类的方法

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数据库存储过程的应用实例

跟我学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调用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类

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类

通过oracle调用java类并加载jar包到oracle中以支持java类

根据鬼子要‎求,最初的单纯‎使用ora‎c le发送‎和接收ma‎i l被抛弃‎(上一篇文章‎描述了具体‎实现),转而要求使‎用orac‎l e调用j‎a va,并通过ja‎v amai‎l来实现m‎a il的相‎关处里。

这里问题就‎出现了,我编写过j‎a va,我编写过p‎l/sql,但是,从来没听说‎过使用or‎a cle来‎调用jav‎a。

同事没有一‎个作过的。

不过,后来察看了‎相关资料,才知道,这个技术还‎确实有。

于是做如下‎的相关记录‎。

我要做的第‎一个是把我‎之前编好的‎一个压缩功‎能java‎类和其需要‎的jar包‎文件加载到‎oracl‎e中,并使其能够‎被成功调用‎。

如何压缩文‎件,稍后处理。

我们先说如‎何加载ja‎va类和j‎ar包到o‎racle‎。

首先,压缩功能需‎要的环境配‎置:1、操作系统需‎要拥有支持‎l oadj‎a va命令‎的jdk。

2、加载jlh‎a.jar包,到orac‎l e数据库‎中。

操作过程:在dos环‎境下,输入命令:loadj‎a va -r -f -o -user ussca‎r es/ussca‎r es@ussca‎r es jlha.jar这个命令就‎是orac‎l e加载jlha.jar包的‎命令。

编写好需要‎的,负责压缩的‎类:Direc‎t oryz‎i p在其源文件‎头插入一行‎:creat‎e or repla‎c e and compi‎l e java sourc‎e named‎direc‎t oryz‎i p as并执行在数‎据库com‎mandwindo‎w中,则导入数据‎库。

既然已经成‎功导入类到‎oracl‎e中,那么接下来‎就是编写函‎数,使得ora‎cle能够‎调用此类中‎的代码:[SQL]view plain‎c opyprint‎?1.creat‎e or repla‎c e funct‎i on zipbl‎o b (retur‎n BLob‎BLOB,inBlo‎b BLOB,filen‎a me VARCH‎A R2) retur‎n BLOB2. as langu‎a ge java name3. ' s.cares‎.commo‎n.Direc‎t oryZ‎i p.zip(oracl‎e.sql.BLOB,oracl‎e.sql.BLOB,ng.Strin‎g) retur‎n oracl‎e.sql.BLOB ' ;4./5.<PRE>然后就可以‎编写测试程‎序,在oral‎ce控制台‎进行测试:[SQL]view plain‎c opyprint‎?1.decla‎r e2.pBlob‎blob; --原始数据3.rBlob‎blob; --压缩后的数‎据4.typro‎w uss_r‎o w;5.begin‎6.selec‎t d0030‎7. into pBlob‎8. from dewey‎.cysct‎02919. where‎d0020‎= '300'10. ;11.rBlob‎:= empty‎_blob‎();12.delet‎e from dewey‎.cysct‎0291 where‎d0010‎= 'tst';13.inser‎t into dewey‎.cysct‎0291 value‎s('tst','100',rBlob‎,'','','','');14.selec‎t d0030‎into rBlob‎from dewey‎.cysct‎0291 where‎d0010‎= 'tst'for updat‎e;15.--rBlob‎:= zipbl‎o b(rBLob‎,pBlob‎,'20080‎62519‎06.pdf');16.rBlob‎:= zipLi‎s tToB‎l ob(rBLob‎,'1,2,3,4,54'||chr(13)||chr(10)||'2,2,3,4,54','20080‎62519‎06.csv');mi‎t;18.end;19.<PRE></FONT>。

oracle存储过程调用javasource的方法

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调用

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参数了。

JAVA连接ORACLE数据库

JAVA连接ORACLE数据库

JAVA連接ORACLE數據庫连接Oracle数据库的各种oracle JDBC驱动程序的细节。

这些细节包括:1、导入JDBC包2、注册oracle JDBC驱动程序3、打开数据库连接4、执行SQL DML语句在数据库表中获取、添加、修改和删除行一、JDBC驱动程序共有有4种1、Thin驱动程序Thin驱动程序是所有驱动程序中资源消耗最小的,而且完全用java编写的。

该驱动程序只使用TCP/IP且要求Oracle Net。

被称为第4类驱动程序。

它使用TTC协议与Oracle数据库进行通信。

能够在Applet、Application中使用。

2、OCI驱动程序OCI驱动比Thin需要资源要多,但性能通常好一点。

OCI驱动适合于部署在中间层的软件,如Web服务器。

不能在applet中使用OCI驱动。

是第2类驱动程序。

不完全用java写的,还包含了c代码。

该驱动有许多附加的性能增强特性,包括高级的连接缓冲功能。

注意:OCI驱动要求在客户计算机上安装它。

3、服务器内部驱动程序服务器内部驱动程序提供对数据库的直接访问,Oracle JVM使用它与数据库进行通信。

Oracle JVM是与数据库集成的Java Virtual Machine,可以使用Oracle J VM将Java类装载进数据库,然后公布和运行这个类中包含的方法。

4、服务器Thin驱动程序服务器端Thin驱动程序也是由Oracle JVM使用的,它提供对远程数据库的访问。

也是完全用Java编写的。

二、导入JDBC包三、注册Oracle JDBC驱动程序必须先向java程序注册Oracle JDBC驱动程序,然后才能打开数据库连接。

有两种注册Oracle JDBC驱动程序的办法。

1、使用ng.Class的forName()方法例子:Class.forName("oracle.jdbc.OracleDriver");2、使用JDBC DriverManager类的registerDriver()方法。

java oracle存储过程写法及调用

java oracle存储过程写法及调用

java oracle存储过程写法及调用Java中调用和编写Oracle存储过程是非常常见的操作,可以利用存储过程来执行数据库操作,提高数据库的性能和安全性。

本文将为您详细介绍Java中调用和编写Oracle存储过程的方法和步骤。

一、什么是Oracle存储过程?Oracle存储过程是一段预定义在数据库中的PL/SQL代码,可以像函数一样接收参数和返回值,用于完成特定的数据库操作。

存储过程可以包含SQL语句、逻辑控制语句、流程控制语句等,可以完成复杂的业务逻辑和数据库操作。

二、Java中调用Oracle存储过程的步骤1. 导入相关的JDBC驱动在Java中调用Oracle存储过程之前,首先需要导入相关的JDBC驱动。

可以从Oracle官网下载相应版本的JDBC驱动,将其添加到Java项目的classpath中。

2. 建立数据库连接使用JDBC的Connection对象与数据库建立连接。

可以使用如下代码建立连接:String url = "jdbc:oracle:thin:localhost:1521:orcl";String username = "username";String password = "password";Connection conn = DriverManager.getConnection(url, username, password);需要将url、username和password替换为实际的数据库连接信息。

3. 创建CallableStatement对象使用Connection对象的prepareCall方法创建CallableStatement对象,该对象用于执行存储过程的调用。

String sql = "{call 存储过程名称(?, ?)}";CallableStatement cstmt = conn.prepareCall(sql);需要将存储过程名称替换为实际的存储过程名称。

oracle调用java方法

oracle调用java方法

oracle调用java方法在Oracle数据库中,可以通过Java调用存储过程、函数和触发器。

以下是在Oracle数据库中调用Java方法的步骤:1. 在Oracle数据库中创建一个Java类,并将其编译为字节码文件(.class文件)。

2. 在Oracle数据库中创建一个Java源对象,将编译后的字节码文件导入到该源对象中。

例如:CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED java_class AS <Java源代码>;3. 创建Java类的包装器(wrapper):CREATE OR REPLACE FUNCTION java_method(arg1 <参数类型>, arg2 <参数类型>, ...)RETURN <返回值类型>AS LANGUAGE JAVANAME'fully_qualified_java_class_name.method_name(java_parameter_data_typ es)';其中,fully_qualified_java_class_name是完全限定的Java类名,method_name是要调用的Java方法名。

4. 调用Java方法:SELECT java_method(arg1, arg2, ...) FROM dual;其中arg1, arg2等是Java方法的参数。

注意:调用Java方法需要在Oracle数据库中创建Java虚拟机,并启用相关权限。

以上是在Oracle数据库中调用Java方法的一般步骤。

具体的步骤和语法可能会有所不同,取决于您的具体数据库版本和配置。

请参考Oracle官方文档或使用特定版本的Oracle数据库的文档进行详细了解和操作。

java连接oracle数据库的各种方法及java在数据库中的含义[1]

java连接oracle数据库的各种方法及java在数据库中的含义[1]

java连接oracle数据库的各种方法及java在数据库中的含义java与oracle的接口:在数据库中运行JAVA可以说是ORACLE8i的最令人激动的新特性。

在你创建的使用ORACLE8i 数据库的应用程序中,你可以使用与JAVA有关的新特征,轻松的将程序发布到INTERNET或INTRANET上。

Methods for Using Java in ORACLE==================================大家都知道JAVA在跨平台开发与INTERNET开发中已经比较流行,ORACLE8i及以后的版本中都包含了对在数据库中运行JAVA的扩展支持,这里有两种方法可以使用:JDBC:与ODBC类似, JDBC 提供了一个驱动接口使你可以在JAVA程序中访问数据库。

注:JDBC驱动内嵌在数据库中虚拟机中。

SQLJ:是一个JAVA预编译器,它可以将内嵌的SQL语句转化为JAVA 语句.SQLJ的使用与运行机理与其它ORACLE的与编译器(如Pro*C,Pro*COBOL)类似。

实际上,为了使我们形象的记住SQLJ提供的功能,我们也可以直接将SQLJ改名为Pro*Java。

将JAVA集成到数据库中是双向的。

也就是说你可以在JAVA中调用SQL与PL/SQL,也可以在SQL与PL/SQL中调用JAVA。

JAVA程序可以直接通过JDBC驱动调用SQL与PL/SQL,反过来,你也可以在SQL 与PL/SQL中直接调用JAVA。

在数据库中,JAVA命名空间直接映射到数据库模式的命名空间中,这样可以方便JAVA的存取与调用。

数据库同时提供扩展的DDL语句,通过这些语句,你可以象创建一个存储过程一样在数据中创建内嵌的JAVA程序。

Features of ORACLE JDBC Drivers=================================在ORACLE8i中有三种类型的JDBC驱动,他们都使用相同的 syntax, APIs, and Oracle extensions,以使JAVA代码在robust clients、Web-based Java applets, and Java stored procedures之间保持轻便灵活:三种类型如下:1.JDBC OCI:此驱动类似于传统的ODBC 驱动。

oracle加载java类

oracle加载java类
int HttpResult;
URL url = null;
BufferedReader in = null;
URLConnection urlconn = null;
InputStreamReader isr = null;
urlconn.connect();
HttpURLConnection httpconn=(HttpURLConnection)urlconn;
HttpResult=httpconn.getResponseCode();
if(HttpResult==HttpURLConnection.HTTP_OK) {
as language java name 'UpdateBuyerIndexJava.updateBuyerIndex(ng.String,ng.String)';
5.触发器
create or replace
trigger buyer_update_java_trigger after update
end if;
-- triggre_modify(:old.ORDERID,to_char(sysdate,'yyyy-MM-dd HH24:mi:ss'));
end;
--索引
select * from user_indexes where table_name='' ;
import java.io.InputStreamReader;
import java.io.RandomAccessFile;
import .HttpURLConnection;
import .URL;

JAVA调用ORACLE存储过程小结

JAVA调用ORACLE存储过程小结

JAVA调用ORACLE存储过程小结在Java中调用Oracle存储过程是一个常见的需求,本文将给出一个关于如何在Java中调用Oracle存储过程的小结。

主要包括以下方面内容:1. 连接到Oracle数据库:首先需要使用Java的JDBC API来连接到Oracle数据库。

可以使用Oracle提供的JDBC驱动程序,通过加载驱动程序的方式来建立与数据库的连接。

在连接数据库时,需要提供数据库的URL、用户名和密码。

2. 构造存储过程的调用语句:在Java中调用Oracle存储过程时,需要构造一个适当的SQL语句来调用存储过程。

调用语句的格式为“{call 存储过程名(参数1, 参数2, ...)}”。

3. 设置存储过程的输入参数:在构造存储过程的调用语句后,需要通过PreparedStatement对象设置存储过程的输入参数。

这可以通过调用PreparedStatement对象的setXXX(方法来实现,其中XXX是参数的数据类型。

例如,如果输入参数是整数类型,则可以调用setInt(方法设置参数的值。

4. 执行存储过程:设置好存储过程的输入参数后,可以通过调用PreparedStatement对象的executeUpdate(或execute(方法来执行存储过程。

executeUpdate(方法适用于执行插入、更新或删除操作的存储过程,而execute(方法适用于执行查询操作的存储过程。

5. 获取存储过程的输出参数:执行存储过程后,可以通过PreparedStatement对象的getXXX(方法来获取存储过程的输出参数的值。

需要注意的是,存储过程的输出参数必须在执行存储过程之前通过调用registerOutParameter(方法来注册。

6. 关闭连接和释放资源:执行完存储过程后,需要关闭与数据库的连接,并释放相关的资源。

可以通过调用Connection对象的close(方法来关闭连接。

下面是一个示例代码,展示了如何在Java中调用Oracle存储过程:```javaimport java.sql.*;public class CallOracleProcedurepublic static void main(String[] args)Connection conn = null;CallableStatement stmt = null;try// 连接到Oracle数据库Class.forName("oracle.jdbc.driver.OracleDriver");//构造存储过程的调用语句String sql = "{call PROCEDURE_NAME(?, ?, ?)}";stmt = conn.prepareCall(sql);//设置存储过程的输入参数stmt.setString(1, "input1");stmt.setInt(2, 10);//注册存储过程的输出参数stmt.registerOutParameter(3, Types.VARCHAR);//执行存储过程stmt.executeUpdate(;//获取存储过程的输出参数String output = stmt.getString(3);System.out.println("Output: " + output);} catch (SQLException , ClassNotFoundException e) e.printStackTrace(;} finally//关闭连接和释放资源tryif (stmt != null) stmt.close(;if (conn != null) conn.close(;} catch (SQLException e)e.printStackTrace(;}}}```上述示例代码展示了如何通过Java程序调用Oracle存储过程。

oracle存储过程调用javasource的方法(一)

oracle存储过程调用javasource的方法(一)

oracle存储过程调用javasource的方法(一)Oracle存储过程调用JavaSource的方法引言在Oracle数据库中,我们可以使用存储过程来进行复杂的数据处理和业务逻辑实现。

有时候,我们需要在存储过程中调用Java代码,以实现更复杂的功能。

本文将介绍一些在Oracle存储过程中调用JavaSource的方法。

方法一:使用CREATE JAVA语句创建Java类首先,我们可以使用CREATE JAVA语句在Oracle数据库中创建一个Java类,然后在存储过程中调用这个Java类的方法。

具体步骤如下: 1. 使用CREATE JAVA语句在Oracle数据库中创建一个Java类。

例如:CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED "He lloWorld" ASpublic class HelloWorld {public static String sayHello(String name) {return "Hello, " + name + "!";}};2.创建一个存储过程,其中调用了刚刚创建的Java类的方法。

例如:CREATE OR REPLACE PROCEDURE callJavaMethod ISlanguage Java name '() return ';resultStr ;BEGINresultStr := ('World');DBMS__line(resultStr);END;3.执行存储过程,测试Java类的调用是否成功。

例如:BEGINcallJavaMethod;END;方法二:使用CREATE LIBRARY语句创建Java库另一种方式是使用CREATE LIBRARY语句在Oracle数据库中创建一个Java库,然后在存储过程中调用这个Java库。

oracle调用Java

oracle调用Java
创建
public class OracleJavaProc { public static void main(String[] argv) { System.out.println("It''s a Java Oracle procedure."); } } SQL> grant create any directory to scott; SQL> conn scott/tiger 已连接。 SQL> create or replace directory test_dir as ''d:\oracle''; 目录已创建。 SQL> create or replace java class using bfile(test_dir, “OracleJavaProc.CLASS'') / Java 已创建。
然后在Oracle中把这个类导入成为一个函数,执行命令: create or replace function hello_sp(name varchar2) return varchar2 as language java name 'org.bromon.oracle.Hello.say(ng.String) return ng.String'; 函数已创建。 现在可以调用该函数,执行: select hello_sp('bromon') from dual; 有一个需要注意的问题是,假如我们的java方法是没有参数的,比如: public static String say() { return "你好”; } 函数名不应该有扩号:hello_sp,否则会报告函数有编译错误。

在ORACLE中调用JAVA

在ORACLE中调用JAVA

Oracle中的Java体系结构目前,使用Java来扩展存储程序是一种很流行的方法。

在使用Java类库处理数据的过程中,PL/SQL是必不可少的一环,这是因为PL/SQL封装了Java类库的数据访问,即任何Java存储对象访问的数据都必须经过PL/SQL。

由于本章的所有内容只被最新的数据库版本所支持,因此它独立于本书的其他章节,以下是本章要介绍的内容:●Oracle中的Java体系结构●Oracle JDBC的连接类型●客户端驱动器(Client-side driver),即JDBC瘦驱动(thin driver)●Oracle调用接口驱动器,即中间层胖驱动(middle-tier thick driver)●Oracle服务器端内部驱动器(Oracle Server-Side Internal Driver),即服务器级的胖驱动●在Oracle中创建Java类库●创建内部服务器的Java函数●创建内部服务器的Java过程●创建内部服务器的Java对象●创建、装载、删除、使用Java类库时的故障诊断●映射Oracle类型本章将向您展示一张Oracle中巨大的Java组织结构图,在解释了Java的体系结构之后,您还会看到开发和扩展Java组件的方法。

使用Java扩展的原因:我们将使用PL/SQL作为存储Java类库和其他PL/SQL存储程序或匿名块程序之间的接口。

我们还会映射Oracle和Java之间的本地数据类型和用户自定义数据类型,以便能定义有效接口和支持JSP(Java Server Page,Java服务器页面)。

1Oracle中的Java体系结构Oracle9i和10g版本的数据库为开发服务器端或内部Java程序组件提供了一个健壮的体系结构。

Java组件采用OO(Object-Oriented,面向对象)的结构,这样的结构非常适合Oracle的对象-关系模型(Object-Relational model)。

Oracle调用Java方法(下)复杂Jar包封装成Oracle方法以及ORA-29521错误

Oracle调用Java方法(下)复杂Jar包封装成Oracle方法以及ORA-29521错误

Oracle调⽤Java⽅法(下)复杂Jar包封装成Oracle⽅法以及
ORA-29521错误
上⼀篇随笔中已经说了简单的Jar是如何封装的,但是我的需求是根据TIPTOP的查询条件产⽣XML⽂件并上传到FTP主机中,那么就要涉及到XML⽣成的⽅法和FTP上传的⽅法所以在Eclipse写的时候引⽤了第三⽅的价包:jdbc, org.dom4j , mons
把这⼏个jar包和⾃⼰的代码封装成⼀个jar包,结果在执⾏loadjava命令的时候总是会报⼏个ORA-29521: referenced name java/xxx/xxx/xxx could not be found 报的错是dom4j和commons找不到类。

从⽹上找到的解决⽅法也是众说纷纭,有的说这个是因为OJVM的问题,有的说是因为Jar包的问题。

有的说是因为Jar包的相关依赖包缺少导致的,但是⾃⼰试了⼀下都没有解决这个问题,
最后⽤了⼀个“⼟⽅法”解决了这个问题:因为我⽤的这个价包都是开源的,可以从官⽹上下载的到源码所以先从官⽹上下载源代码导⼊到Eclipse看⼀下发现确实这些Jar包都依赖了另外的依赖Jar包但是这些⽅法我都⽤不上所以索性直接Copy需要⽤的源码到项⽬中把⾃⼰项⽬中已经引⽤的包名都拷贝进来,然后修修改改,再把引⽤的Jar删掉。

不过jdbc的包却没有报这个错误,个⼈猜测可能是某些Jar包的Maven ⽂件导致的,如果有朋友知道为什么的话可以说下。

最后执⾏导出(Export..->Runnable JAR file->Package required libraires into generated JAR ⼀路NEXT)导出后的Jar包执⾏LoadJava命令的时候就不会报这个错了。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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>。

相关文档
最新文档