在PLSQL中编译复杂的java(转)
原文地址:在PLSQL中编译复杂的java
PLSQL中可以编译运行JAVA程序。
一个简单的例子:
create or replace and compile java source named xxfnd as package xxfnd;
public class Test{
public void Test(){
}
public static String helloWorld{
return "success";
}
}
但是如果真的想在PLSQL中用JAVA做成什么事情,这样的程度是不够的。
需要在PLSQL中使用JAVA的原因
1. JAVA作为开源跨平台的语言,提供了丰富的工具包,可以处理很多复杂的内容,如操作EXCEL,发布Service等等;
2. Oracle开发中有些事情只能用PLSQL来做。比如工作流。
而当我们需要在工作流中借助JAVA完成复杂任务时,需要引用很多jar包。
本文介绍一个完整的例子,在PLSQL中实现复杂的JAVA程序调用。
1. 导入java程序所需jar包。这是很关键的一步。很多文章都语焉不详。
上传所需jar包至应用服务器,这里假设绝对路径为:
/home/applqv/pushjar/
telnet至应用服务器。
sqlplus /nolog
connect sys/pass as sysdba;
使用如下语法将jar包加载至数据库:
call dbms_java.loadjava('-v -r PUBLIC -synonym /home/applqv/pushjar/axis.jar');
在导入中可能会报错,但是报错的时候,大部分jar包中的class文件应该已经成功加载了。所以有时候可以
忽略这个报错。
可以用以下SQL查询已经成功加载的class
select * from dba_objects where object_type='JAVA CLASS' AND OBJECT_NAME LIKE '%com/ibm/wsdl%'
可以在数据库parameter user_dump_dest 路径中找到dbms_java.loadjava的trace文件。其中会有详细的log记录。
每次执行dbms_java.loadjava都会有trace。
2. 在PLSQL中编写java程序。可以直接将按照以下语法写好的java程序贴到PLSQL中,然后F8编译。
create or replace and compile java source named xxfnd as package xxfnd;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.util.HashMap;
import java.util.Map;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class Test{
public void Test(){
}
public static String helloWorld(String a){
String url = "http://172.2.2.1/wms/services/ws";
try{
Service service = new Service();
org.apache.axis.client.Call call = (org.apache.axis.client.Call)service.createCall();
call.setTargetEndpointAddress(url);
call.setOperationName(new QName("null", "push"));
Map map = new HashMap();
for (String key: map.keySet()) {
String sreMessage =
"{"Push": [{"username": "" + key + "","appname": "BG_405","pushcontents": "" +
map.get(key) + ""}]} ";
System.out.println("请求:" + sreMessage);
System.out.println("返回:" +
call.invoke(new Object[] { sreMessage }));
System.out.println( "aaa"+call.getMessageContext().getCurrentMessage().getMessageType());
}
}
catch(Exception e){
}
return "success";
}
}
3. 查看编译是否出错:
show errors java source xxfnd;
4.将java程序封装在PLSQL包中:
create or replace package test_pkg is
function hello_world(a varchar2) return varchar2;
end test_pkg;
/
create or replace package body test_pkg is
function hello_world(a varchar2) return varchar2 is
language java name 'xxfnd.Test.helloWorld(java.lang.String) return String';
end test_pkg;
/
5. 至此,java程序已经可以调用了。
在PLSQL中编译复杂的java(转)的更多相关文章
- 在 Sublime Text 2 中编译和运行 Java 程序,以及输出中文出错问题解决办法
Sublime Text 2 是我最喜欢用来编码的文本编辑器,如果你尝试使用后相信你也会喜欢上它的.在这篇文章中我们将讨论如何在 Sublime Text 2 中编译和运行 Java 程序. 第一步: ...
- 【Java】【转】在命令行中编译和运行java
原文:http://blog.csdn.net/u010900574/article/details/50792353 同时加载编译多个jar包和java文件 在个人平常使用或者当我们把代码部署到Li ...
- 在linux命令行中编译和运行java文件
同时加载编译多个jar包和java文件 在个人平常使用或者当我们把代码部署到linux服务器上的时候,我们经常需要通过命令行编译和运行java文件,网上关于这个的方法大多是通过 javac -cp f ...
- 记录5-如何在UltraEdit中编译和运行Java
1点击“高级”,再点击“工具配置” 2点击“插入”,在“菜单项”名称上输入“编译java程序”,在“命令行”里输入“javac %n%e”,在工作目录上填“%p”. 3切换到“输出”项,选择“输出到列 ...
- Java 7 中的Switch 谈 Java版本更新和反编译知识
Java 7 中的Switch 谈 Java版本更新和反编译知识 学习编程,享受生活,大家好,我是追寻梦的飞飞.今天主要讲述的是Java7中的更新Switch实现内部原理和JAD反编 ...
- 在CMD窗口中使用javac和java命令进行编译和执行带有包名的具有继承关系的类
一.背景 最近在使用记事本编写带有包名并且有继承关系的java代码并运行时发现出现了很多错误,经过努力一一被解决,今天我们来看一下会遇见哪些问题,并给出解决办法. 二.测试过程 1.父类代码 pack ...
- idea中编译项目报错 java: javacTask: 源版本 1.8 需要目标版本 1.8
问题如上面所叙: > idea中编译项目报错 java: javacTask: 源版本 1.8 需要目标版本 1.8 解决方案: > Setting->Compiler->Ja ...
- Centos下命令行编译MapReduce代码(Java)并打包在Hadoop中执行
前提条件:搭建好Hadoop系统 新建文件夹:input 和 output hdfs dfs -mkdir /inputhdfs dfs -mkdir /output 查看文件系统 hdfs df ...
- cmd中编译java脚本 (2013-05-02-bd 写的日志迁移
此前提是已经搭建好了jdk的编译环境! 先写一个java脚本如:建立一个HelloWord.java //public : 表示此类是公共的 一个java文件中只能有一个public类 //class ...
随机推荐
- Effective Java 阅读笔记——方法
38:检查参数的有效性 每当编写方法或者构造器的时候,应该考虑它的参数有哪些限制,在方法的开头处对参数进行检查,并且把这些限制写入文档. 注意: 对于公有方法,应该使用@throws标签在文档中说明违 ...
- 深入理解Android的startservice和bindservice
一.首先,让我们确认下什么是service? service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互.它必须由用户或者其他程序显式的启动.它的优先级比 ...
- iOS打印Debug日志的方式
简单介绍以下几个宏: 1) __VA_ARGS__ 是一个可变参数的宏,这个可变参数的宏是新的C99规范中新增的,目前似乎只有gcc支持(VC6.0的编译器不支持).宏前面加上##的作用在于,当可变参 ...
- iOS图像资源Images Assets
1. 在工程中单击并打开导航区域中的Images.xcassets,看看都有些什么东东:]: 2. 在图中可以看到中间位置有两个虚线框,感觉应该可以直接拖文件进来.OK,那就先准备一下资源文件,如下图 ...
- android EditView ime
1.android:imeOptions 可以用来配置输入法右下角的: 这可以在xml中添加相应的属性android:imeOptions actionGo 输入法右下角显示“去往” actionS ...
- MYSQL性能调优: 对聚簇索引和非聚簇索引的认识
聚簇索引是对磁盘上实际数据重新组织以按指定的一个或多个列的值排序的算法.特点是存储数据的顺序和索引顺序一致.一般情况下主键会默认创建聚簇索引,且一张表只允许存在一个聚簇索引. 在<数据库原理&g ...
- Effetive Java 22 Favor static member classes over nonstatic
Nested class types Usage and remark Advantage Disadvantage static member classes Use for public help ...
- python基本数据结构-字典-方法
- 机器学习六--K-means聚类算法
机器学习六--K-means聚类算法 想想常见的分类算法有决策树.Logistic回归.SVM.贝叶斯等.分类作为一种监督学习方法,要求必须事先明确知道各个类别的信息,并且断言所有待分类项都有一个类别 ...
- gdb 远程调试 android native 程序
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 先看一张原理图: 我是 Linux 和 Android 双料 0 基础,目前对 gdb 了解的很浅显.(注意 ...