oracle学习笔记(第十八章:oracle & java)

本文介绍如何在Oracle数据库中创建和使用Java外部例程,包括Java代码的编写、加载及发布步骤,并通过MD5加密和阶乘两个示例进行详细说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1, 创建JAVA 外部例程:
1) 编制java代码
2) 将java代码加载数据库
3) 创建一个把pl/sql参数映射到java参数的pl/sql包装来发布java外部例程

将java代码加载数据库:
方法一:
create [or replace] [and {resolve | compile} [noforce] java {{source | resource}
named [schema.] primary_name}|class [schema schema_name]]
[involver_rights_clause]
[resolve resolve_clause]
{as source_text using lob_clause}

{procedure | function} procedure_name [plsql_argument_list]
as language java [name extenal_name [(java_parameter_list)]]

其中 schema 是存储java对象的模式
Primary_name 是java源代码

方法二:该方法在操作系统的命令提示符下执行的
Loadjava [options] files
例如:loadjava –uer liyongjie/123456 –resolve Md5.java

注意被存储过程调用的方法体必须是静态的

例子1:该例子是用来说明md5加密
首先编写java代码并编译:
import java.security.*;
import java.security.spec.*;

public class Md5
{
public final static String Md5(String s)
{
char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};
try
{
byte[] strTemp = s.getBytes();
MessageDigest mdTemp = MessageDigest.getInstance("MD5");
mdTemp.update(strTemp);
byte[] md = mdTemp.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++)
{
byte byte0 = md[i];
str[k++] = hexDigits[byte0 >>> 4 & 0xf];
str[k++] = hexDigits[byte0 & 0xf];
}
return new String(str);
}
catch (Exception e){
return null;
}
}
public static void main(String[] args)
{
System.out.print(Md5.Md5("XX"));
}
}
然后将java文件加载数据库,在加载数据库之前先创建一个指向java文件的目录
create or replace directory JAVA_DIR
as 'D:\BOOKS\Oracle\Oracle and Java';
再加载java文件:
create or replace and resolve java source
named MD5 using bfile(java_dir,'Md5.java') ;
再发布例程:
create or replace package md5 as
function f_md5(v_str in varchar2) return varchar2 is
language java name 'Md5.Md5(java.lang.String) return java.lang.String';
end md5;
最后调用测试:
declare
v_str varchar2(500);
begin
v_str := md5.f_md5('x');
dbms_output.put_line(v_str);
end ;

例子2:该例子实现阶乘
Java类:
public class Fun
{
public static int Fun(int n)
{
int m=0;
if(n==0)
{
return 0;
}
else if(n==1)
{
return 1;
}
else
{
for(int i=1;i<=n;i++)
{
m=n*Fun(n-1);
}
return m;
}
}
}
加载java文件:
create or replace and resolve java source
named MD5 using bfile(java_dir,'Md5.java') ;-- java_dir: directory (目录)
发布例程:
create or replace package pkg_fun as
function fun(i_number in number) return number is
language java name 'Fun.Fun(int) return int';
end;
测试:
declare
v_fun number;
begin
v_fun := pkg_fun.fun(5);
dbms_output.put_line(v_fun);
end ;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值