Oracle调用Java类开发的存储过程、函数的方法
oracle调用java类的基本步骤
1. 编写java代码,后续可以直接使用java代码,class文件或者jar包
2. 将写好的java代码导入到oracle数据库中,有两种方法:一种是使用loadjava命令;另一种是在编写PL/SQL的时候编写
3. 编写存储过程、函数 来封装java代码,以实现后面对java功能的调用
4. 调用写好的存储过程和oracle函数
loadjava命令介绍
有关loadJava的各个参数的意思,可以使用:loadjava -help 命令来获得详细帮助。本文中主要用到的参数有-u(用于输入用户名及密码)、-v(用于输出详细的反馈信息)、-resolve(对于没有编译的Java文件,可以用resolve来编译)、-f(这个命令我在例子中没有用到,它的意思是force,表示不管之前是否已经导入过该Java类,都强制再次导入)。loadjava可以实现对class文件、jar文件、resource文件、property文件的导入,当导入class文件时,可以用如下命令:
loadjava –u username/userpassword –v filename.class
当导入Java文件时,可以用如下命令:
loadjava –u username/userpassword –v -resolve filename.java
当导入jar文件时,可以用如下命令:
loadjava –u username/userpassword –v -resolve filename.jar
实例:使用oracle调用java全步骤
下面一个类是对32位MD5扩展为64位MD5的算法类,我们将在java函数中调用这个类中的方法实现对32位
MD5算法的扩展
步骤一:编写java代码:(注意参数写完整类名)
//create or replace and compile java source named mac32tomac64 as
public class Mac32ToMac64 {
public static byte[] hex2byte(java.lang.String hex)
throws Exception {
if (hex.length() % 2 != 0) {
throw new Exception();
}
char[] arr = hex.toCharArray();
byte[] b = new byte[hex.length() / 2];
for (int i = 0, j = 0, l = hex.length(); i < l; i++, j++) {
java.lang.String swap = "" + arr[i++] + arr[i];
int byteint = java.lang.Integer.parseInt(swap, 16) & 0xFF;
b[j] = new java.lang.Integer(byteint).byteValue();
}
return b;
}
public static java.lang.String byte2hex(byte[] b) {
java.lang.StringBuffer hs = new java.lang.StringBuffer();
java.lang.String stmp;
for (int i = 0; i < b.length; i++) {
stmp = java.lang.Integer.toHexString(b[i] & 0xFF).toUpperCase();
if (stmp.length() == 1) {
hs.append("0").append(stmp);
} else {
hs.append(stmp);
}
}
return hs.toString();
}
public static byte[] lengthen(byte[] byteArray) {
byte[] result = new byte[byteArray.length * 2];
for (int i = 0; i < byteArray.length; i++) {
result[2 * i] = byteArray[i];
int value = (byteArray[i] + byteArray[i == byteArray.length - 1 ? 0 : i + 1]) & 0xFF;
result[2 * i + 1] = new java.lang.Integer(value).byteValue();
}
return result;
}
public static java.lang.String to64Mac(java.lang.String req32Mac)
throws Exception {
byte[] bytes = hex2byte(req32Mac);
if (bytes.length == 16) {
return byte2hex(lengthen(bytes));
} else {
throw new Exception("");
}
}
}
步骤二:使用loadjava命令将java导入到orale数据库中,键入密码后就会有导入信息了
loadjava –u username –v -resolve Mac32ToMac64 .java
亦可以通过以下语句验证是否导入成功
select * from user_objects u where u.OBJECT_NAME='Mac32ToMac64'步骤三:编写存储过程或者函数,以实现以后的调用,如果一个Java方法没有返回值,那么就封装成存储过程,如果有返回值,就封装成函数,这里是封装成函数的例子,存储过程类似,不再敖述。这里varchar对应的java String类型必须写完整类名,否则会报错
CREATE OR REPLACE FUNCTION to64mac(r IN VARCHAR2) RETURN VARCHAR2 AS LANGUAGE JAVA NAME 'Mac32ToMac64.to64Mac(java.lang.String) return String'; 可以在PL/SQL中直接测试结果![]()
Oracle调用Java类开发的存储过程、函数的方法的更多相关文章
- Oracle数据库中调用Java类开发存储过程、函数的方法
Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日 浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...
- oracle调用JAVA类的方法
导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了, 1.操作系统需要拥有支持loadjava命令的jdk. 2.加 ...
- Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法
最近在工作中遇到了遇到了一个需求需要将TIPTOP中的数据导出成XML并上传到FTP主机中,但是4GL这方面的文档比较少最终决定使用Oracle调用Java的方法,在使用的过程中发现有很多的坑,大部分 ...
- 规则引擎集成接口(七)规则引擎调用Java类
规则引擎调用Java类 通过myEclipse编写一个简单工程,其中方法是两数相加等到结果,既结果1=输入值1+输入值2.实现规则调用外部接口的方法有三种. 1:接口实例:在myEclipse中制作一 ...
- oracle 调用java
1.首先在PL/SQL中创建JAVA类,并编译 例如:这个是到的一个查询目录下面文件列表的java类 创建此java 类用: create or replace and compile java so ...
- php调用java类文件
最近在折腾php调用java类,网上查阅资料,最终选用JavaBridge,遇到的第一个问题是java_require() 函数引入自定义java打包而成的jar文件,在新版本的JavaBridge中 ...
- Thymeleaf常用语法:模板文件中表达式调用Java类的静态方法
在模板文件的表达式中,可以使用“${T(全限定类名).方法名(参数)}”这种格式来调用Java类的静态方法. 开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1. ...
- C#调用Java类
C#调用Java类 (2011-01-07 14:02:05) 转载▼ 分类: Java学习 1. 在Eclipse中新建名称为hello的java project,此工程仅包含一个文件hell ...
- kettle中调用java类
kettle中调用java类 有时须要在kettle调用java类,如:验证.查询或自己定义加密等.有时甚至连主要的数据訪问都不那么简单,如获取一个存储文件或使用一个数据库连接,某些数据源可能封装在应 ...
随机推荐
- python requests请求卡住问题
最近经常接到别人反馈某个爬虫工具程序没有正常运行,需要下载的资讯数据也没有及时进行收录. 刚开始以为可能是机器的问题,偶尔机器会出现程序运行中途卡住的情况. 但随着异常的情况越来越频繁,我便只好去排查 ...
- 测试理论--web测试方法总结
一.输入框 1.字符型输入框: (1)字符型输入框:英文全角.英文半角.数字.空或者空格.特殊字符“~!@#¥%……&*?[]{}”特别要注意单引号和&符号.禁止直接输入特殊字符时,使 ...
- wampserver-mysql创建数据库
首先打开wampserver,在右下角会出现一个这样的图标,左键单击它,选择MYSQL->MYSQL控制台 输入密码 创建一个新的数据库:create database XXX 注意要输“;”, ...
- HOJ——T 2430 Counting the algorithms
http://acm.hit.edu.cn/hoj/problem/view?id=2430 Source : mostleg Time limit : 1 sec Memory limit : 64 ...
- cogs 50. [NOIP2002] 选数
50. [NOIP2002] 选数 ★ 输入文件:choose.in 输出文件:choose.out 简单对比时间限制:1 s 内存限制:128 MB [问题描述]: 已知 n 个整数 ...
- Icomparer和Icomparable集合排序
c#中实现对象集合的排序可以使用ArrayList中的Sort()方法,而有比较才能谈排序,因为不是基本类型(如string ,int.double......等)所以.NET Framework不可 ...
- php实现简单算法3
php实现简单算法3 这篇文章主要介绍了PHP经典算法集锦,整理了各种常见的算法,包括排序.查找.遍历.运算等各种常见算法原理与实现技巧,需要的朋友可以参考下 1.首先来画个菱形玩玩,很多人学C时在书 ...
- ToString DateTime 操作
来源:网络 字符型转换为字符串// C 货币 2.5.ToString("C"); // ¥2.50 // D 10进制数 25.ToString("D5"); ...
- shell项目-分发系统-构建文件分发系统
shell项目-分发系统-构建文件分发系统 需求背景对于大公司而言,肯定时不时会有网站或者配置文件更新,而且使用的机器肯定也是好多台,少则几台,多则几十甚至上百台.所以,自动同步文件是至关重要的. 实 ...
- ip---查看网络信息
Linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者. ifconfig属于net-tools.ip属于iproute2 设置一个IP地址,可以使用下列ip命令: ip add ...