1. 导入jar
  2. oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了,
  3.  1、操作系统需要拥有支持loadjava命令的jdk
  4.  2、加载jlha.jar包,到oracle数据库中。
  5. 操作过程:在dos环境下,输入命令: loadjava -r -f -o -user usscares/usscares@usscares jlha.jar
  6. 注意:jar包要在1.4的环境下编译,项目右键 properties java compiler compoler compliance level 1.4 即可 否则报version 49 类似的错误
  7. 调用JAVA
  8. oracle调用JAVA类的方法主要有以下三种:
  9.  
  10. loadjava方法装载;
  11. 可能是调试方便,据说这种方法比较通用。
  12. c:\test\hello.java
  13. public class hello
  14. {
  15.  
  16. public static void main(String[] args)
  17. {
  18. System.out.println("Hello");
  19. hello h = new hello();
  20. h.insertM(9);
  21. }
  22. public static void insertM(int pid)
  23. {
  24. System.out.println("This is the method insertM.");
  25. }
  26. }
  27.  
  28. C:\test>loadjava -u test/test@mydb -v -resolve hello.java
  29.  
  30. SQL> create procedure prc_hehe as language java name 'hello.main(java.lang.String[])
  31.  
  32. 过程已创建。
  33.  
  34. SQL> call prc_hehe();
  35.  
  36. 调用完成。
  37.  
  38. SQL> set serveroutput on size 2000
  39. SQL> call prc_hehe();
  40.  
  41. 调用完成。
  42.  
  43. SQL> exec dbms_java.set_output(2000);
  44.  
  45. PL/SQL 过程已成功完成。
  46.  
  47. SQL> call prc_hehe();
  48. Hello
  49. This is the method insertM.
  50.  
  51. 调用完成。
  52.  
  53. SQL>show errors;
  54.  
  55. 修改java类,先删除再装载,方法:
  56.  
  57. dropjava -u test/test@mydb -v -resolve hello.java
  58.  
  59. loadjava -u test/test@mydb -v -resolve hello.java
  60.  
  61. 用sql语句创建
  62. create or replace and compile java source named hehe
  63. AS
  64. public class hello
  65. {
  66. public static void msg(String name)
  67. {
  68. System.out.println("hello," + name);
  69. }
  70. };
  71.  
  72. create or replace procedure prc_hehe
  73. (
  74. p_name VARCHAR2
  75. )
  76. as
  77. language java name 'hello.msg(java.lang.String)';
  78.  
  79. -- 调用结果
  80.  
  81. SQL> call prc_hehe('oopp');
  82. hello,oopp
  83.  
  84. 用外部class文件来装载创建
  85. create or replace directory CLASS_DIR as 'c:\test';
  86.  
  87. create or replace java class using bfile(class_dir,'hello.class');
  88.  
  89. create or replace procedure prc_hello
  90. (
  91. p_name VARCHAR2
  92. )
  93. as
  94. language java name 'hello.msg(java.lang.String)';
  95.  
  96. -- 测试结果
  97.  
  98. SQL> call prc_hello('java');
  99. java
  100.  
  101. 可能出现的错误
  102. SQL> call prc_hello('Jerry');
  103. call prc_hello('Jerry')
  104. *
  105. 第 1 行出现错误:
  106. ORA-29516: Aurora 断言失败: Assertion failure at eox.c:359
  107. Uncaught exception System error: java/lang/UnsupportedClassVersionError
  108.  
  109. 原因:机器装了多个java版本,oracle的java版本低于环境变量设置的版本。
  110.  
  111. 解决方法:用$ORACLE_HOME/jdk/javac 重新编译java文件
  112.  
  113. 核对java已经导入数据库
  114.  
  115. select * from user_source where type LIKE 'JAVA%' AND NAME = '<java file>'
  116.  
  117. 建立function
  118.  
  119. CREATE OR REPLACE FUNCTION <FUNCTION_NAME> (<PARAMETER LIST IN ORACLE DATATYPE>) RETURN <ORACLE DATATYPE OF RETURN VARIABLE> AS
  120. LANGUAGE JAVA
  121. NAME '<clase.method>(<parameter list in java datatype>) return java datatype of return variable';
  122.  
  123. 例:
  124.  
  125. 登陆某一用户登录,并创建java程序资源,在pl/sql中java source中显示你所编写的java代码;
  126. create or replace and compile java source named bb_wx_replosssbk as
  127. import java.sql.*;
  128. import oracle.jdbc.driver.*;
  129.  
  130. public class bb_wx_replosssbk
  131. {
  132. /**
  133. * 社保卡挂失
  134. */
  135. public static String callProc(String sSfzh, String sPwd, String sType)
  136. {
  137. OracleDriver driver = new OracleDriver();
  138. Connection connection = null;
  139. CallableStatement cstmt = null;
  140. String sRtn = "beg";
  141. try
  142. {
  143. sRtn = " try beg";
  144. connection = DriverManager.getConnection("jdbc:oracle:thin:user/pwd@127.0.0.1:1521:orcl");
  145. sRtn = "con";
  146. cstmt = connection.prepareCall("{call run_replosssbk(?,?,?,?)}");
  147. sRtn = "invoke";
  148. cstmt.setString(1, sSfzh);
  149. cstmt.setString(2, sPwd);
  150. cstmt.setString(3, sType);
  151. cstmt.registerOutParameter(4, java.sql.Types.VARCHAR);
  152. sRtn = "set value";
  153. cstmt.executeUpdate();
  154. sRtn = "execute";
  155. sRtn = cstmt.getString(4);
  156. }
  157. catch (Exception e)
  158. {
  159. sRtn = e.toString();
  160. e.printStackTrace();
  161. }
  162. finally
  163. {
  164. try
  165. {
  166. if (cstmt != null)
  167. {
  168. cstmt.close();
  169. }
  170. if (connection != null)
  171. {
  172. connection.close();
  173. }
  174. }
  175. catch (Exception e)
  176. {
  177. e.printStackTrace();
  178. }
  179. }
  180. return sRtn;
  181. }
  182. }
  183.  
  184. 创建调用Java资源的函数
  185. create or replace function run_bb_wx_replosssbk(
  186. sSfz in varchar2,
  187. sPwd in varchar2,
  188. sType in varchar2
  189. )
  190. return varchar2
  191. as
  192. language java name 'bb_wx_replosssbk.callProc(java.lang.String,java.lang.String,java.lang.String) return java.lang.String';
  193.  
  194. 建立一过程调用存储过程
  195. create or replace procedure RUN(
  196. sSfz in varchar2,
  197. sPwd in varchar2,
  198. sType in varchar2
  199. sRtn out varchar2
  200. )
  201. as
  202. begin
  203. --sRtn := run_bb_wx_replosssbk(sSfz in varchar2,sPwd in varchar2,sType in varchar2);
  204. Select run_bb_wx_replosssbk(sSfz in varchar2,sPwd in varchar2,sType in varchar2)
  205. Into sRtn from dual;
  206. end;
  207. /
  208.  
  209. 附:
  210.  
  211. 如果需要java存取文件,需要使用dba用户赋权
  212.  
  213. EXEC Dbms_Java.Grant_Permission('ONBOARDING', 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '');
  214. EXEC Dbms_Java.Grant_Permission('ONBOARDING', 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', '');
  215. EXEC dbms_java.grant_permission( 'ONBOARDING', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' );
  216. 收回权限的语句如下
  217.  
  218. EXEC Dbms_Java.revoke_Permission('ONBOARDING', 'SYS:java.lang.RuntimePermission', 'writeFileDescriptor', '');
  219. EXEC Dbms_Java.revoke_Permission('ONBOARDING', 'SYS:java.lang.RuntimePermission', 'readFileDescriptor', '');
  220. EXEC dbms_java.revoke_permission( 'ONBOARDING', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' );

Oracle触发器反向调用Java程序的更多相关文章

  1. 在ORACLE触发器里调用JAVA程序

    因为项目需要,有一个已经写好的Java程序,想要在Oracle某个表的触发器中调用,以使得每次数据更新时,调用这个JAVA程序,来修改后台某个数据. 现将过程记录如下: 1.编写JAVA程序 publ ...

  2. C通过JNI反向调用JAVA程序方法

    JNI反向调用JAVA程序 引述:上文讲过java线程---OS线程的关系,然后C怎样反向调用JAVA程序方法是我们这篇讲的重点 1.ThreadTest中添加run()方法 2.编译ThreadTe ...

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

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

  4. C#调用java程序

    前言: 最近跟项目组的人合作一个项目,由于之前我用的是java写的一个与android通信的程序,现在另一个同事来编写界面程序,由于C#编写起来比较方便,而我又不想重新写之前java的那段代码,于是需 ...

  5. LoadRunner调用Java程序—性能测试-转载

    LoadRunner调用Java程序—性能测试   为了充分利用LoadRunner的场景控制和分析器,帮助我们更好地控制脚本加载过程,从而展现更直观有效的场景分析图表.本次将重点讨论LoadRunn ...

  6. oracle触发器调用java程序

    1.创建java程序:接收存储过程传递的参数,发送socket通信. create or replace and compilejava source named jym as import java ...

  7. oracle PL/SQL调用Java生成Excel

    现在有个需求,  要求编写oracle存储过程生成Excel文件到指定目录,  但是oracle自己的API貌似不太给力,  所以只能通过另一种更强大的语言来实现了  ——Java.有一个Java框架 ...

  8. LoadRunner调用Java程序—性能测试

    为了充分利用LoadRunner的场景控制和分析器,帮助我们更好地控制脚本加载过程,从而展现更直观有效的场景分析图表.本次将重点讨论LoadRunner如何调用Java测试代码,完成压力测试. 通常我 ...

  9. python调用java程序--jpype

    官方网站:http://jpype.sourceforge.net/ 官方使用文档:http://jpype.sourceforge.net/doc/user-guide/userguide.html ...

随机推荐

  1. Oracle取TOP N条记录(转载)

    在SQL Server里面有top关键字可以很方便的取出前N条记录,但是Oracle里面却没有top的使用,类似实现取出前N条记录的简单方法如下: 方法1:利用ROW_NUMBER函数 取出前5条记录 ...

  2. oracle存储过程中的if...elseif...else用法

    if ... then ...   elsif ... then ... else ...   end if; or     if ... then      ...   else ...   end ...

  3. css3动画中的steps值详解

    css3的动画的animation-timing-function属性定义了动画的速度曲线,一般的速度曲线大家都知道,什么ease,linear,ease-in,ease-out,还有自定义贝塞尔曲线 ...

  4. Centos 检查磁盘读写性能

    启动Tomcat发现deploy war的速度明显变慢, 怀疑磁盘出问题 测试写入 [tomcat@localhost ~]$ dd if=/dev/zero of=kwxgd bs=64k coun ...

  5. Java集合系列:-----------03ArrayList源码分析

    上一章,我们学习了Collection的架构.这一章开始,我们对Collection的具体实现类进行讲解:首先,讲解List,而List中ArrayList又最为常用.因此,本章我们讲解ArrayLi ...

  6. BZOJ 1082 【SCOI2005】 栅栏

    Description 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材.可是木材店老板说他这里只剩下少部分大规格的木板了.不过约翰可以购买这些木 ...

  7. weblogic.nodemanager.common.ConfigException: Native version is enabled but nodemanager native library could not be loaded 解决办法

    近日在一个原本工作正常的weblogic web server(操作系统为redhat 64位系统)上折腾安装redis/hadoop等东东,yum install了一堆第3方类库后,重启weblog ...

  8. 虾皮工作室QQ群列表

    各位博友: 本群不仅仅是提供好的资料,更重要是提供平台,提供解决问题的方法和思路.求人不如求己,掌握合理的方法和方式才是不断进步的根本.看我的文档,不单单是看内容,更应该从整理的方式和角度是深思,去想 ...

  9. 在线音乐网站【04】Part two 功能实现

       上一篇博客里面已近总结了三个功能的具体实现,今天把剩余功能的具体实现补充总结,如果你想对整个小项目有清楚的了解,建议去看下前几篇博客. 1.在线音乐网站(1)需求和功能结构 2.在线音乐网站(2 ...

  10. (六)观察者模式详解(包含观察者模式JDK的漏洞以及事件驱动模型)

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 本章我们讨论一个除前面的单例 ...