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类的方法主要有以下三种:
用loadjava方法装载;
可能是调试方便,据说这种方法比较通用。
c:\test\hello.java
Java Code
|
1 |
public class hello public static void main(String[] args) |
C:\test>loadjava -u test/test@mydb -v -resolve hello.java
SQL> create procedure prc_hehe as language java name 'hello.main(java.lang.String[])
过程已创建。
SQL> call prc_hehe();
调用完成。
SQL> set serveroutput on size 2000
SQL> call prc_hehe();
调用完成。
SQL> exec dbms_java.set_output(2000);
PL/SQL 过程已成功完成。
SQL> call prc_hehe();
Hello
This is the method insertM.
调用完成。
SQL>show errors;
修改java类,先删除再装载,方法:
dropjava -u test/test@mydb -v -resolve hello.java
loadjava -u test/test@mydb -v -resolve hello.java
用sql语句创建
Code
|
1 |
create or replace and compile java source named hehe |
-- 调用结果
SQL> call prc_hehe('oopp');
hello,oopp
用外部class文件来装载创建
create or replace directory CLASS_DIR as 'c:\test';
create or replace java class using bfile(class_dir,'hello.class');
create or replace procedure prc_hello
(
p_name VARCHAR2
)
as
language java name 'hello.msg(java.lang.String)';
-- 测试结果
SQL> call prc_hello('java');
java
可能出现的错误
SQL> call prc_hello('Jerry');
call prc_hello('Jerry')
*
第 1 行出现错误:
ORA-29516: Aurora 断言失败: Assertion failure at eox.c:359
Uncaught exception System error: java/lang/UnsupportedClassVersionError
原因:机器装了多个java版本,oracle的java版本低于环境变量设置的版本。
解决方法:用$ORACLE_HOME/jdk/javac 重新编译java文件
核对java已经导入数据库
select * from user_source where type LIKE 'JAVA%' AND NAME = '<java file>'
建立function
CREATE OR REPLACE FUNCTION <FUNCTION_NAME> (<PARAMETER LIST IN ORACLE DATATYPE>) RETURN <ORACLE DATATYPE OF RETURN VARIABLE> AS
LANGUAGE JAVA
NAME '<clase.method>(<parameter list in java datatype>) return java datatype of return variable';
例:
登陆某一用户登录,并创建java程序资源,在pl/sql中java source中显示你所编写的java代码;
SQL Code
|
1 |
create or replace and compile java source named bb_wx_replosssbk as public class bb_wx_replosssbk |
创建调用Java资源的函数
create or replace function run_bb_wx_replosssbk(
sSfz in varchar2,
sPwd in varchar2,
sType in varchar2
)
return varchar2
as
language java name 'bb_wx_replosssbk.callProc(java.lang.String,java.lang.String,java.lang.String) return java.lang.String';
建立一过程调用存储过程
create or replace procedure RUN(
sSfz in varchar2,
sPwd in varchar2,
sType in varchar2
sRtn out varchar2
)
as
begin
--sRtn := run_bb_wx_replosssbk(sSfz in varchar2,sPwd in varchar2,sType in varchar2);
Select run_bb_wx_replosssbk(sSfz in varchar2,sPwd in varchar2,sType in varchar2)
Into sRtn from dual;
end;
/
附:
如果需要java存取文件,需要使用dba用户赋权
EXEC Dbms_Java.Grant_Permission('ONBOARDING', 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '');
EXEC Dbms_Java.Grant_Permission('ONBOARDING', 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', '');
EXEC dbms_java.grant_permission( 'ONBOARDING', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' );
收回权限的语句如下
EXEC Dbms_Java.revoke_Permission('ONBOARDING', 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '');
EXEC Dbms_Java.revoke_Permission('ONBOARDING', 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', '');
EXEC dbms_java.revoke_permission( 'ONBOARDING', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' );
oracle调用JAVA类的方法的更多相关文章
- Oracle调用Java类开发的存储过程、函数的方法
oracle调用java类的基本步骤 1. 编写java代码,后续可以直接使用java代码,class文件或者jar包 2. 将写好的java代码导入到oracle数据库中,有两种方法:一种是使用lo ...
- 如何在Mybatis的xml文件调用java类的方法
在mybatis的映射xml文件调用java类的方法:使用的是OGNL表达式,表达式格式为:${@prefix@methodName(传递参数名称)} 1.如下代码所示:方法必须为静态方法:以下我只是 ...
- C#实现调用Java类中方法
基本思路: 用C#实现调用Java编写的类中的方法:重点是将Java编写的程序打包成Jar,然后使用开源工具IKVM将其转化成DLL控件,在.NET环境下调用. 分为以下步骤: 1.下载JDK6(注: ...
- mybatis调用java类
在mybatis的映射xml文件调用java类的方法: 使用的是OGNL表达式,表达式格式为:${@prefix@methodName(传递参数名称)} 1.如下代码所示:方法必须为静态方法:以下我只 ...
- Oracle数据库中调用Java类开发存储过程、函数的方法
Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日 浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...
- Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法
最近在工作中遇到了遇到了一个需求需要将TIPTOP中的数据导出成XML并上传到FTP主机中,但是4GL这方面的文档比较少最终决定使用Oracle调用Java的方法,在使用的过程中发现有很多的坑,大部分 ...
- java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊
java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...
- thymeleaf模板引擎调用java类中的方法(附源码)
前言 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去解决 ...
- Jsp中如何通过Jsp调用Java类中的方法
Jsp中如何通过Jsp调用Java类中的方法 1.新建一个项目,在src文件夹下添加一个包:如:cn.tianaoweb.com; 2.再在包中添加一个类:如 package com; public ...
随机推荐
- Entity Framework 6 Recipes 2nd Edition(10-2)译 -> 返回输出参数
10-2. 返回输出参数 问题 想获取存储过程里的一个或多个输出参数的值 解决方案 假设我们有一个像Figure 10-1所示的,出租车辆与租金收入的模型 Figure 10-1.出租车辆与租金收入的 ...
- Oracle---------sql 中取值两列中值最大的一列
1.表中有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列. select (case when a>b then a else b ...
- 小知识:C#可选参数的一个陷阱
一.背景: 互联网行业,为了降低程序维护.升级的部署风险,往往会将程序拆分成很多项目,编译成多个dll部署,这样发布的时候,只需要部署修改过的dll即可. 二.问题: 有一个函数,在很多个地方被使 ...
- 安卓与IOS移动段浏览器视频与音频的问题与总结
1. 安卓.苹果移动浏览器上都不支持html5的视频与音频自动播放 2. 安卓.苹果移动浏览器要支持播放,前提是必须是用户触发的事件 3. 针对这个特殊的问题,代码需要在用户进来第一次屏幕触发中,去创 ...
- JavaScript权威设计--Window对象(简要学习笔记十三)
1.Window对象是所有客户端JavaScript特性和API的主要接入点. Window对象中的一个重要属性是document,它引用Document对象. JavaScript程序可以通过Doc ...
- CSS实现图片缩放特效
今天是感恩节,祝大家感恩节快乐哦!最近天冷了,大家注意保暖哟.下面一起看看小颖写的demo吧. html代码: <!DOCTYPE html> <html> <head& ...
- console.log("A"-"B"+"3")=?
(点击上方的订阅号,可快速关注,关注有惊喜哦^_^) 前不久看到一道JS基础题目,做了一下竟然错了一半...在此分享一下: 先把题目放上来,大家可以自己测试一下再看答案哦^_^ ①console.lo ...
- 微信小程序定时器组件(输入时间字符串即可倒计时)
昨天写了代码,今天发现要重用,干脆就抽出来做个组件得了,顺便还改善了一下代码通用性. 昨天的代码在这里 github下载地址 用法: 引入: var timer = require('../../pl ...
- Android5.0以下出现NoClassDefFoundError
事发起因 大周末的,突然接到老大的电话说很多用户无法安装新上线的APK,让我紧急Fix(现Android项目就我一己之力).但奇怪的是也没有Bug Reporter,而且开发过程中也一直没问题.根据上 ...
- php内核分析(六)-opcode
这里阅读的php版本为PHP-7.1.0 RC3,阅读代码的平台为linux 查看opcode php是先把源码解析成opcode,然后再把opcode传递给zend_vm进行执行的. // 一个op ...