导入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.java

 Java Code 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

 

public 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 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

  1. 用sql语句创建

 Code 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

   

create or replace and compile java source named hehe
AS
public class hello
{
    public static void msg(String name)
    {
        System.out.println("hello," + name);
    }
};
 
create or replace procedure prc_hehe
(
       p_name VARCHAR2
)
as
language java name 'hello.msg(java.lang.String)';

-- 调用结果

SQL> call prc_hehe('oopp');
hello,oopp

  1. 用外部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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58

 

create or replace and compile java source named bb_wx_replosssbk as
import java.sql.*;
import oracle.jdbc.driver.*;

public class bb_wx_replosssbk
{
    /**
    *   社保卡挂失
    */
    public static String callProc(String sSfzh, String sPwd, String sType)
    {
        OracleDriver driver = new OracleDriver();
        Connection connection = null;
        CallableStatement cstmt = null;
        String sRtn = "beg";
        try
        {
            sRtn = " try beg";
            connection = DriverManager.getConnection("jdbc:oracle:thin:user/pwd@127.0.0.1:1521:orcl");
            sRtn = "con";
            cstmt = connection.prepareCall("{call run_replosssbk(?,?,?,?)}");
            sRtn = "invoke";
            cstmt.setString(1, sSfzh);
            cstmt.setString(2, sPwd);
            cstmt.setString(3, sType);
            cstmt.registerOutParameter(4, java.sql.Types.VARCHAR);
            sRtn = "set value";
            cstmt.executeUpdate();
            sRtn = "execute";
            sRtn = cstmt.getString(4);
        }
        catch (Exception e)
        {
            sRtn = e.toString();
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if (cstmt != null)
                {
                    cstmt.close();
                }
                if (connection != null)
                {
                    connection.close();
                }
            }
            catch (Exception e)
            {
                e.printStackTrace();
            }
        }
        return sRtn;
    }
}

创建调用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类的方法的更多相关文章

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

    oracle调用java类的基本步骤 1. 编写java代码,后续可以直接使用java代码,class文件或者jar包 2. 将写好的java代码导入到oracle数据库中,有两种方法:一种是使用lo ...

  2. 如何在Mybatis的xml文件调用java类的方法

    在mybatis的映射xml文件调用java类的方法:使用的是OGNL表达式,表达式格式为:${@prefix@methodName(传递参数名称)} 1.如下代码所示:方法必须为静态方法:以下我只是 ...

  3. C#实现调用Java类中方法

    基本思路: 用C#实现调用Java编写的类中的方法:重点是将Java编写的程序打包成Jar,然后使用开源工具IKVM将其转化成DLL控件,在.NET环境下调用. 分为以下步骤: 1.下载JDK6(注: ...

  4. mybatis调用java类

    在mybatis的映射xml文件调用java类的方法: 使用的是OGNL表达式,表达式格式为:${@prefix@methodName(传递参数名称)} 1.如下代码所示:方法必须为静态方法:以下我只 ...

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

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

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

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

  7. java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊

    java 调用 C# 类库搞定,三步即可,可以调用任何类及方法,很简单,非常爽啊 java 调用 C# 类库搞定,可以调用任何类及方法,很简单,非常爽啊 总体分三步走: 一.准备一个 C# 类库 (d ...

  8. thymeleaf模板引擎调用java类中的方法(附源码)

    前言 <Docker+SpringBoot+Mybatis+thymeleaf的Java博客系统开源啦> 由于开源了项目的缘故,很多使用了My Blog项目的朋友遇到问题也都会联系我去解决 ...

  9. Jsp中如何通过Jsp调用Java类中的方法

    Jsp中如何通过Jsp调用Java类中的方法 1.新建一个项目,在src文件夹下添加一个包:如:cn.tianaoweb.com; 2.再在包中添加一个类:如 package com; public ...

随机推荐

  1. 小丁带你走进git的世界二-工作区暂存区分支

    小丁带你走进git的世界二-工作区暂存区分支 一.Git基本工作流程 1.初始化一个仓库 git  init git  clone git仓库分为两种情况: 第一种是在现有项目或目录下导入所有文件到 ...

  2. AWS的SysOps认证考试样题解析

    刚考过了AWS的developer认证,顺手做了一下SysOps的样题.以下是题目和答案. When working with Amazon RDS, by default AWS is respon ...

  3. hibernate多对一单向关联

    关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...

  4. UIApplication和OpenUrl的基于使用方法

    UIApplication实用方法 前言: 本文介绍的方法每一个人在项目都应用过,只是有的时候容易忘记每次都要去百度.因为有些方法在整个项目中可能就只会写一次,基于此我只是做个笔记. 1. 每一个应用 ...

  5. angular2

    1 class两种写法 (1).直接写 class="{{}}"; (2).数组 arr[a,b,c] ng-class = "arr" 2.class和sty ...

  6. 创建 Monitor 并测试 - 每天5分钟玩转 OpenStack(124)

    前面我们创建了 Pool,VIP 并添加了 Member.今天将创建 Monitor,然后测试 LBaaS 是否能够正常工作. 创建 Monitor LBaaS 可以创建 monitor,用于监控 P ...

  7. seajs3.0.0源码分析记录

    自己边读变加了一些注释,理解了一下seajs3.0.0工作的流程.正则没有一个个去理解,插件模块也没看, 以后有时间了可以补充完整~ 事件系统中事件队列的获取&定义方法 var list = ...

  8. 利用Python进行数据分析(8) pandas基础: Series和DataFrame的基本操作

    一.reindex() 方法:重新索引 针对 Series   重新索引指的是根据index参数重新进行排序. 如果传入的索引值在数据里不存在,则不会报错,而是添加缺失值的新行. 不想用缺失值,可以用 ...

  9. MongoDB 存储引擎和数据模型设计

    标签: MongoDB NoSQL MongoDB 存储引擎和数据模型设计 1. 存储引擎 1.1 存储引擎是什么 1.2 MongoDB中的默认存储引擎 2. 数据模型设计 2.1 内嵌和引用 2. ...

  10. TypeScript之面向对象初体验

    1.安装nodejs和vscode: nodejs : https://nodejs.org/en/ Visual Studio Code :  https://www.visualstudio.co ...