度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 835|回复: 6
打印 上一主题 下一主题

[分享] Oracle数据库中调用Java类开发存储过程、函数的方法

[复制链接]

348

主题

3572

帖子

9250

积分

论坛元老

Rank: 8Rank: 8

积分
9250
跳转到指定楼层
楼主
发表于 2020-6-11 21:40:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL,除此之外,还可以用时下最流行的编程语言Java来做开发。随着对oracle的了解越来越多,越来越禁不住oracle的诱惑,oracle技术真的是一门很有趣的学问。之前,我在博客中总结了挺多有关SQL、PL/SQL的,但是对于oracle数据库中Java类的调用却没有总结,也是因为之前不太会,这会儿总结了一下,特来分享。

1、oracle中调用Java类的基本思路

要在oracle中调用Java类来实现存储过程、函数,我觉的大概的思路是这样的:

(1)首先编写Java代码,可以用自己喜欢的代码编辑器编辑,编辑好了以后,可以将代码编译成.class文件,也可以打成jar包,也可以啥都不操作,就是一个Java源代码文件在那放着。

(2)想办法将已经写好的Java代码导入到oracle数据库中,这里导入主要有两种方法,一种是使用loadjava命令,另一种是直接在编写PL/SQL代码的时候写Java代码,这两种方法我在下面会详细总结。

(3)编写存储过程、函数来封装Java代码,以实现后面对Java功能的调用。

(4)准备工作已经做完了,最后就是调用了,调用的方式与PL/SQL完全一样,没啥不同的。

2、loadjava命令介绍

在切入正题之前,先简单介绍下loadjava命令及其用法,loadjava命令有很多的参数,也没有必要全部都了解,loadjava的调用规则如下图1所示:

loadjava命令不是在sql*plus中调用的,而是在cmd窗口中,有关loadJava的各个参数的意思,可以使用:loadjava -help 命令来获得详细帮助。本文中主要用到的参数有-u(用于输入用户名及密码)、-v(用于输出详细的反馈信息)、-resolve(对于没有编译的Java文件,可以用resolve来编译)、-f(这个命令我在例子中没有用到,它的意思是force,表示不管之前是否已经导入过该Java类,都强制再次导入)。loadjava可以实现对class文件、jar文件、resource文件、property文件的导入,当导入class文件时,可以用如下命令:

  1. loadjava –u username/userpassword –v filename.class
复制代码

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

  1. loadjava –u username/userpassword –v -resolve filename.java
复制代码

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

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

3、举例说明oracle调用Java全步骤

例子:一个简单的需求,用Java代码实现求圆的面积,圆周率PI为3.14,输入的参数为圆的半径R,输出圆的面积S,要求可以在oracle中用PL/SQL代码调用该Java类实现求圆的面积的功能。

Step 1:编写Java代码,PL/SQL Developer本身虽然支持编写Java代码,但是毕竟不是专业的,对Java的工具提供的不是特别好,我喜欢用MyEclipse开发好以后复制过来,下面是我在MyEclipse中开发好的代码。

// 圆工具类,计算圆的面积public class CircleTools {  // 定义常量PI  public static final double PI = 3.14;  // 计算面积  public static double calcSquare(double r) {    return PI * r * r;  }}

注意在写Java代码的时候,为了能够直接能够在oracle中被调用,所以这里在需要调用的方法前要加上public和static。

Step 2:写好Java代码,下面就是要将Java导入到oracle数据库中,导入的方法在前文提到过可以用loadJava或者直接写。如果要用loadJava导入,先把上面的代码文件保存为CircleTools.java,然后在cmd命令行中进入该目录下,然后执行如下命令:

  1. loadjava –u username/userpassword –v -resolve CircleTools.java
复制代码

执行上面的命令就OK了,下面提供另一种方法,就是直接在PL/SQL中写,写法如下:

  1. CREATE OR REPLACE AND COMPILE JAVA SOURCE NAMED circletools AS
  2. // 圆工具类,计算圆的面积
  3. public class CircleTools {
  4.   // 定义常量PI
  5.   public static final double PI = 3.14;
  6.   // 计算面积
  7.   public static double calcSquare(double r) {
  8.     return PI * r * r;
  9.   }
  10. }
复制代码

我的oracle开发工具是PL/SQL Developer,所以我在PL/SQL Developer中执行了上面这段代码,然后查询user_objects表,可以发现CircleTools类已经被导入进了oracle数据库中,如下图2所示:



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
沙发
发表于 2020-6-12 16:33:28 | 只看该作者
收藏一个
回复

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
板凳
发表于 2020-6-12 16:48:26 | 只看该作者
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
地板
发表于 2020-6-12 16:48:48 | 只看该作者
回复 支持 反对

使用道具 举报

328

主题

3738

帖子

8566

积分

作者

Rank: 7Rank: 7Rank: 7

积分
8566
QQ
5#
发表于 2020-6-12 17:20:42 | 只看该作者
回复 支持 反对

使用道具 举报

235

主题

2547

帖子

5835

积分

论坛元老

Rank: 8Rank: 8

积分
5835
6#
发表于 2020-2-14 19:31:53 | 只看该作者
回复 支持 反对

使用道具 举报

141

主题

1551

帖子

3573

积分

论坛元老

Rank: 8Rank: 8

积分
3573
7#
发表于 2020-5-6 17:39:47 | 只看该作者
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-9-28 00:47 , Processed in 0.134076 second(s), 26 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表