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类开发的存储过程、函数的方法的更多相关文章

  1. Oracle数据库中调用Java类开发存储过程、函数的方法

    Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日  浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...

  2. oracle调用JAVA类的方法

    导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了,  1.操作系统需要拥有支持loadjava命令的jdk.  2.加 ...

  3. Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法

    最近在工作中遇到了遇到了一个需求需要将TIPTOP中的数据导出成XML并上传到FTP主机中,但是4GL这方面的文档比较少最终决定使用Oracle调用Java的方法,在使用的过程中发现有很多的坑,大部分 ...

  4. 规则引擎集成接口(七)规则引擎调用Java类

    规则引擎调用Java类 通过myEclipse编写一个简单工程,其中方法是两数相加等到结果,既结果1=输入值1+输入值2.实现规则调用外部接口的方法有三种. 1:接口实例:在myEclipse中制作一 ...

  5. oracle 调用java

    1.首先在PL/SQL中创建JAVA类,并编译 例如:这个是到的一个查询目录下面文件列表的java类 创建此java 类用: create or replace and compile java so ...

  6. php调用java类文件

    最近在折腾php调用java类,网上查阅资料,最终选用JavaBridge,遇到的第一个问题是java_require() 函数引入自定义java打包而成的jar文件,在新版本的JavaBridge中 ...

  7. Thymeleaf常用语法:模板文件中表达式调用Java类的静态方法

    在模板文件的表达式中,可以使用“${T(全限定类名).方法名(参数)}”这种格式来调用Java类的静态方法. 开发环境:IntelliJ IDEA 2019.2.2Spring Boot版本:2.1. ...

  8. C#调用Java类

    C#调用Java类 (2011-01-07 14:02:05) 转载▼   分类: Java学习  1. 在Eclipse中新建名称为hello的java project,此工程仅包含一个文件hell ...

  9. kettle中调用java类

    kettle中调用java类 有时须要在kettle调用java类,如:验证.查询或自己定义加密等.有时甚至连主要的数据訪问都不那么简单,如获取一个存储文件或使用一个数据库连接,某些数据源可能封装在应 ...

随机推荐

  1. CetnOS6 网络配置,主机名配置

    CetnOS6 网络配置,主机名配置 一.通过命令ifconfig -a 查看可用网络设备 二.通过网络配置文件/etc/sysconfig/network-scripts/ifcfg-eth0 配置 ...

  2. canvas和svg小记

    一.关于canvas <canvas> 是 HTML5 新增的元素,可用于通过使用JavaScript中的脚本来绘制图形 例如,它可以用于绘制图形,创建动画. <canvas> ...

  3. Swift学习笔记(12)--数组和字典的复制

    Swift中,数组Array和字典Dictionary是用结构来实现的,但是数组与字典和其它结构在进行赋值或者作为参数传递给函数的时候有一些不同. 并且数组和字典的这些操作,又与Foundation中 ...

  4. jquery事件 【mousedown与mouseup ----keydown与keypress与keyup】focus--blur--orrer--pageX-pageY

    <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> ...

  5. 用Maven创建SpringMVC项目

    IDE:Eclipse Jee JDK:8 Tomcat:8 1.创建项目 File->New->Maven Project-> ->Next-> ->Next-& ...

  6. UI_搭建MVC

    新建RootViewController 继承于 UIViewController 新建RootView 继承于 UIView AppDelegate.m 中引入 #import "Root ...

  7. codeforce 571 B Minimization

    题意:给出一个序列,经过合适的排序后.使得最小. 做法:将a升序排序后,dp[i][j]:选择i个数量为n/k的集合,选择j个数量为n/k+1的集合的最小值. 举个样例, a={1,2,3,4,5,6 ...

  8. Docs-->.NET-->API reference-->System.​Web.​UI.​Web​Controls-->Repeater

    https://docs.microsoft.com/en-us/dotnet/api/system.web.ui.webcontrols.repeater?view=netframework-4.7 ...

  9. 11.Axis客户端接收不同参数类型

    转自:http://www.guance.com/708.html axis只支持简单类型的返回值.在这里逐一介绍axis的各种返回值接受. 1. axis接受基本类型,如int, string等 引 ...

  10. Kinect 开发 —— 姿势识别

    姿势和手势通常会混淆,但是他们是两个不同的概念.当一个人摆一个姿势时,他会保持身体的位置和样子一段时间.但是手势包含有动作,例如用户通过手势在触摸屏上,放大图片等操作. 通常,游戏者很容易模仿指定姿势 ...