Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法[通俗易懂]

Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法[通俗易懂]最近在工作中遇到了遇到了一个需求需要将TIPTOP中的数据导出成XML并上传到FTP主机中,但是4GL这方面的文档比较少最终决定使用Oracle调用Java的方法,在使用的过程中发现有很多的坑,大部分

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

最近在工作中遇到了遇到了一个需求需要将TIPTOP中的数据导出成XML并上传到FTP主机中,但是4GL这方面的文档比较少最终决定使用Oracle调用Java的方法,在使用的过程中发现有很多的坑,大部分的博客只粗略的介绍了下导致耗费了很多时间,在这里分2个博文详细的记录一下这个功能,填一下坑,希望可以帮助到大家。

首先 每个Oracle版本对应的OJVM的版本是不一样的我的Oracle 版本是 Database 11g Release 2 对应的是jdk1.6 所以写Java代码的时候要注意版本号,其次这个功能是默认关闭的所以需要先安装OJVM,脚本安装语法如下(使用sys用户登陆sqlplus安装):

安装JVM运行环境

@?/javavm/install/initjvm.sql

代码100分

卸载JVM运行环境

代码100分@?/javavm/install/rmjvm.sql

查询OJVM是否安装成功

SELECT * FROM DBA_REGISTRY WHERE COMP_ID = "JAVAVM";

Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法[通俗易懂]

执行脚本时间比较长要耐心等待一会,安装完成后需要根据Java文件类型来选择导入语句
LoadJava参数有

  • -u(用于输入用户名及密码)
  • -v(用于输出详细的反馈信息)
  • -resolve(对于没有编译的Java文件可以用resolve来编译)
  • -f(不管之前是否已经导入过该Java类,都强制再次导入)

当导入Class文件时,可以用如下命令:

代码100分loadjava –u username/userpassword –v filename.class

当删除Class文件时,可以用如下命令:

dropjava –u username/userpassword –v filename.class

当导入Java文件时,可以用如下命令:

loadjava –u username/userpassword –v -resolve filename.java

当删除Java文件时,可以用如下命令:

dropjava –u username/userpassword –v filename.java

当导入jar文件时,可以用如下命令:

loadjava –u username/userpassword –v -resolve filename.jar

当删除jar文件时,可以用如下命令:

dropjava –u username/userpassword –v -resolve filename.jar

如果是比较简单的Java方法可以直接使用PL/SQL进行编写,需要调用的方法必须是public static 修饰的(Java方法若需要用到其他价包,报找不到类的错或要用到数据库中的数据 将在下一个博客中说到)

create or replace and compile java source named JavaName as [Java代码]

当使用这种方法的时候可以在PL/SQL 左边的Java Sources 文件夹中找得到源码并编辑,如果导入的是.Java或.Jar格式的就只能在Java Classes 文件夹中找得到并且不能用PL/SQL编辑.
Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法[通俗易懂]

如果导入正常的话使用下面的语句可以查询已经导入的Java类,查询出来的状态必须是”VALID”,否则Oracle则不能调用必须解决报错信息重新导入才能调用

SELECT OBJECT_ID, OBJECT_NAME, OBJECT_TYPE, STATUS
FROM USER_OBJECTS
WHERE OBJECT_TYPE LIKE "JAVA%"

Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法[通俗易懂]

以上代码都执行完成后就可以将Java代码封装成成Oracle 方法(function) ,存储过程(Procedures) 这2个主要是返回值的区别 如果有返回值可以封装成function ,没有返回值可以封装成Procedures,如果有多个返回值…emmmm Java没有多个返回值=。= 我需要封装成function则封装的语句如下:

CREATE OR REPLACE FUNCTION FunctionName(str1  NVARCHAR2,
  str2   NVARCHAR2,
  str3   NVARCHAR2,
  str4  NVARCHAR2,
  str5   NVARCHAR2)
  RETURN NVARCHAR2 AS
  LANGUAGE JAVA NAME "com/xxx/xxx/xxx/xxx.ClassName(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String) return java.lang.String";

这个语句需要注意2点其一就是Java方法的包名需要用“/”分割而类名用“.” 这个当时卡了很久算是一个坑,其二Java方法的传入类型要和数据库类型相对应例如: NVARCHAR2和String ,更详细的对应关系可以看Oracle 官方的文档

Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法[通俗易懂]

那如果需要传入的是一大堆表数据呢? 其实这种类型对应并不支持复杂的类型,要想获得复杂数据 需要在Jar包中加入JDBC包使用JDBC来建立查询语句来获取数据 获取JDBC的Connection对象的时候可以可以这样写,不用写数据库链接名和账号密码,可以直接使用数据库的连接。

Connection conn = DriverManager.getConnection("jdbc:default:connection:");

详情也可以参照Oracle官方文档中的这一单元:Using the Server-Side Internal JDBC Driver
Oracle调用Java方法(上)如何使用LoadJava命令和如何将简单的Jar包封装成Oracle方法[通俗易懂]

本文主要介绍了如何导入和如何封装Java方法,如果你的业务逻辑比较复杂需要用到第三方jar包来实现自己的业务逻辑那么这些坑将在下一篇中说到。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/7798.html

(0)
上一篇 2023-03-13
下一篇 2023-03-13

相关推荐

  • sql组合查询语句_数据库查询语句where的用法

    sql组合查询语句_数据库查询语句where的用法目录汇总:SQL 入门教程:面向萌新小白的零基础入门教程 使用 WHERE 子句 中介绍的所有 WHERE 子句在过滤数据时使用的都是单一的条件。为了进行更强的过滤控制,SQL 允许给出多个 WHER

    2023-04-19
    149
  • Python List长度求取方法

    Python List长度求取方法Python中的List是一种灵活而强大的序列数据类型,存储多个元素并且可以进行索引和切片。计算List的长度是常见的操作,可以使用Python内置函数len()来获得List的长度。例如:

    2024-01-06
    115
  • Mybatis检查SQL注入[通俗易懂]

    Mybatis检查SQL注入[通俗易懂]Mybatis 的 Mapper.xml 语句中 parameterType 向SQL语句传参有两种方式: { } 和 ${ }。 使用 { }是来防止SQL注入,使用${ }是用来动态拼接参数。

    2023-02-12
    136
  • 运行Python文件的方法

    运行Python文件的方法Python是一种高级编程语言,拥有简单、易学的语法,并且被广泛应用于许多不同领域,如科学计算、数据分析、Web开发、机器学习等等。

    2024-04-27
    70
  • Mac Python卸载方法

    Mac Python卸载方法Python是一种非常受欢迎的编程语言,被广泛应用于web开发、科学计算、人工智能等领域。它的易学易用以及强大的库支持,使得越来越多的人开始使用Python进行编程。即使Python变得如此普及,但有时候我们也需要卸载Python。本篇文章将详细介绍Mac Python卸载方法。

    2024-08-24
    31
  • 详谈 MySQL 8.0 原子 DDL 原理[通俗易懂]

    详谈 MySQL 8.0 原子 DDL 原理[通俗易懂]柯煜昌 青云科技研发顾问级工程师 目前从事 RadonDB 容器化研发,华中科技大学研究生毕业,有多年的数据库内核开发经验。 文章字数 3800+,阅读时间 15 分钟 背景 MySQL 5.7 的字

    2023-06-05
    134
  • redis 5.0.7 源码阅读——双向链表[通俗易懂]

    redis 5.0.7 源码阅读——双向链表[通俗易懂]redis中动态字符串sds相关的文件为:adlist.h与adlist.c 一、数据结构 redis里定义的双向链表,与普通双向链表大致相同 单个节点: 1 typedef struct listN

    2023-01-24
    142
  • C#通过SQlite连接本地数据文件的几个重要步骤[亲测有效]

    C#通过SQlite连接本地数据文件的几个重要步骤[亲测有效]1.从SQLite官网下载所需要的安装包文件,安装之后在对应的bin文件夹下获取所需要的dll文件,主要包括system.data.sqlite.dll,以及sqlite.interop.dll;;

    2023-02-08
    160

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注