java怎么调用oracle调用java的过程

oracle调用JAVA类的步骤 - Oracle开发当前位置:& &&&oracle调用JAVA类的步骤oracle调用JAVA类的步骤&&网友分享于:&&浏览:0次oracle调用JAVA类的方法导入jar包 在oracle中导入需要的jar包,我们把编辑好的java类打成jar包,直接在oarcle里面写简单的调用就可以了,  1、操作系统需要拥有支持loadjava命令的jdk。  2、加载jlha.jar包,到oracle数据库中。
操作过程:在dos环境下,输入命令: loadjava
jlha.jar 注意:jar包要在1.4的环境下编译,项目右键 properties java compiler compoler compliance level 1.4 即可
否则报version 49 类似的错误
调用JAVA类
oracle调用JAVA类的方法主要有以下三种:
用loadjava方法装载;
可能是调试方便,据说这种方法比较通用。c:\test\hello.java
123456789101112131415 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
-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 2000SQL& call prc_hehe();
调用完成。
SQL& exec dbms_java.set_output(2000);
PL/SQL 过程已成功完成。
SQL& call prc_hehe();HelloThis is the method insertM.
调用完成。
修改java类,先删除再装载,方法:
dropjava -u
-v -resolve hello.java
loadjava -u
-v -resolve hello.java
用sql语句创建
1234567891011121314151617
create or replace and compile java source named heheASpublic class hello{
public static void msg(String name)
System.out.println("hello," + name);
}}; create or replace procedure prc_hehe(
p_name VARCHAR2)aslanguage java name 'hello.msg(java.lang.String)';-- 调用结果
SQL& call prc_hehe('oopp');hello,oopp
用外部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)aslanguage 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:359Uncaught 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
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 create or replace and compile java source named bb_wx_replosssbk asimport 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";
sRtn = " try beg";
connection = DriverManager.getConnection("jdbc:oracle:thin::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();
if (cstmt != null)
cstmt.close();
if (connection != null)
connection.close();
catch (Exception e)
e.printStackTrace();
}}创建调用Java资源的函数create or replace function run_bb_wx_replosssbk(sSfz in varchar2,sPwd in varchar2,sType in varchar2)return varchar2as 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 varchar2sRtn out varchar2)asbegin--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 sR/
如果需要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' );
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有您现在的位置:
&& 解析在Oracle中使用Java的存储过程
解析在Oracle中使用Java的存储过程
来源:环球网校(edu24oL)
&&&&文章摘要:Java存储过程今后在各大数据库厂商中越来越流行,功能也越来越强大。这里以Oracle为例,介绍一下java存储过程的具体用法。
  如何创建java存储过程?
  通常有三种方法来创建java存储过程。
  1. 使用oracle的sql语句来创建:
  e.g. 使用create or replace and compile java source named "&name&" as
  后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。
  1.SQL& create or replace and compile java source named "javademo1"
  2. 2 as
  3. 3 import java.sql.*;
  4. 4 public class JavaDemo1
  5. 5 {
  6. 6 public static void main(String[] argv)
  7. 7 {
  8. 8 System.out.println("hello, java demo1");
  9. 9 }
  10. 10 }
  11. 11 /
  13.Java 已创建。
  15.SQL& show errors java source "javademo1"
  16.没有错误。
  18.SQL& create or replace procedure javademo1
  19. 2 as
  20. 3 language java name 'JavaDemo1.main(java.lang.String[])';
  21. 4 /
  23.过程已创建。
  25.SQL& set serveroutput on
  26.SQL& call javademo1();
  28.调用完成。
  30.SQL& call dbms_java.set_output(5000);
  32.调用完成。
  34.SQL& call javademo1();
  35.hello, java demo1
  37.调用完成。
  39.SQL& call javademo1();
  40.hello, java demo1
  41.调用完成。2. 使用外部class文件来装载创建
  e.g. 这里既然用到了外部文件,必然要将class文件放到oracle Server的某一目录下边。
  1.public class OracleJavaProc
  3. public static void main(String[] argv)
  5. System.out.println("It's a Java Oracle procedure.");
  10.SQL& grant create an
  12.授权成功。
  14.SQL& conn
  15.已连接。
  16.SQL& create or replace directory test_dir as 'd:/oracle';
  18.目录已创建。
  20.SQL& create or replace java class using bfile(test_dir, 'OracleJavaProc.CLASS')
  21. 2 /
  23.Java 已创建。
  25.SQL& create or replace procedure testjavaproc as language java name 'OracleJavaProc.main(java.lang.String[])';
  26. 2 /
  28.过程已创建。
  30.SQL& call testjavaproc();
  32.调用完成。
  34.SQL&
  36.PL/SQL 过程已成功完成。
  38.SQL& set serveroutput on size 5000
  39.SQL& call dbms_java.set_output(5000);
  41.调用完成。
  43.SQL&
  44.It's a Java Oracle procedure.3. 我推荐的一种方法,直接使用loadjava命令远程装载并创建。
  先创建一个类, e.g.
  1.import java.sql.*;
  2.import oracle.jdbc.*;
  4.public class OracleJavaProc {
  6. //Add a salgrade to the database.
  7. public static void addSalGrade(int grade, int losal, int hisal) {
  9. System.out.println("Creating new salgrade for EMPLOYEE…");
  11. try {
  12. Connection conn =
  13. DriverManager.getConnection("jdbc:default:connection:");
  15. String sql =
  16. "INSERT INTO salgrade " +
  17. "(GRADE,LOSAL,HISAL) " +
  18. "VALUES(?,?,?)";
  19. PreparedStatement pstmt = conn.prepareStatement(sql);
  20. pstmt.setInt(1,grade);
  21. pstmt.setInt(2,losal);
  22. pstmt.setInt(3,hisal);
  23. pstmt.executeUpdate();
  24. pstmt.close();
  26. catch(SQLException e) {
  27. System.err.println("ERROR! Adding Salgrade: "
  28. + e.getMessage());
  使用loadjava命令将其装载到服务器端并编译:
  1.D:eclipse3.1workspacedbtest&loadjava -u
-v -resolve Or
  2.acleJavaProc.java
  3.arguments: '-u'
'-v' '-resolve' 'OracleJavaProc.java'
  4.creating : source OracleJavaProc
  5.loading : source OracleJavaProc
  6.resolving: source OracleJavaProc
  查询一下状态:
  1.连接到:
  2.Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
  3.With the Partitioning, OLAP and Oracle Data Mining options
  4.JServer Release 9.2.0.1.0 - Production
  6.SQL& SELECT object_name, object_type, status FROM user_objects WHERE object_type LIKE 'JAVA%';
  8.OBJECT_NAME
  9.--------------------------------------------------------------------------------
  11.OBJECT_TYPE STATUS
  12.------------------------------------ --------------
  13.OracleJavaProc
  14.JAVA CLASS VALID
  16.OracleJavaProc
  17.JAVA SOURCE VALID
  测试一下存储过程:
  1.SQL& create or replace procedure add_salgrade(id number, losal number, hisal num
  2.ber) as language java name 'OracleJavaProc.addSalGrade(int, int, int)';
  3. 2 /
  5.过程已创建。
  7.SQL& set serveroutput on size 2000
  8.SQL& call dbms_java.set_output(2000);
  10.调用完成。
  12.SQL& execute add_salgrade(6, 1);
  13.Creating new salgrade for EMPLOYEE…
  15.PL/SQL 过程已成功完成。
  17.SQL& select * from salgrade where grade=6;
  19. GRADE LOSAL HISAL
  20.---------- ---------- ----------
您现在的位置:解析在Oracle中使用Java的存储过程更多点击&&
    2012计算机软件辅导课程(网络+面授)
Android 开发工程师
日(热招中)
培黎校区及其他校区
培黎校区及其他校区
JAVA 开发工程师
软件测试工程师
     2012计算机软件辅导课程(面授)
Android 开发工程师
JAVA 开发工程师
软件测试工程师
提示:签订就业协议,修满网络和面授的全部课程可安排就业;贷款面授学员发放生活补贴300元,半年后就业还款。查看&&&
职业资格考试专题
IT实训导航
IT实训资讯—>
IT交流回馈—>
职业资格考试培训
职业资格培训课程试听
职业资格考试论坛java 中调用oracle 存储过程到execute()就不执行了
[问题点数:20分,结帖人liang_ljl]
java 中调用oracle 存储过程到execute()就不执行了
[问题点数:20分,结帖人liang_ljl]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
2013年5月 Oracle大版内专家分月排行榜第三
2013年5月 Oracle大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。您的位置: &
如何实现Java对Oracle存储过程的调用
优质期刊推荐您所在的位置: &
JAVA调用Oracle存储过程的实现方法
JAVA调用Oracle存储过程的实现方法
JAVA调用Oracle存储过程是我们在开发过程中经常使用到的操作,下文就该调用方法的两种情况分别作了分析说明,供您参考。
JAVA跟Oracle之间,最常用的操作就是是JAVA调用存储过程,下面就为您介绍JAVA如何对Oracle存储过程进行调用。
Ⅰ、JAVA调用Oracle存储过程【不带输出参数】
过程名称为pro1,参数个数1个,数据类型为整形数据。
import&java.sql.*;& &&public&class&ProcedureNoArgs&{& &public&static&void&main(String&args[])&throws&Exception&{& &&&&&//&加载Oracle驱动& &&&&&DriverManager.registerDriver(new&oracle.jdbc.driver.OracleDriver());& &&&&&//&获得Oracle数据库连接& &&&&&Connection&conn&=&DriverManager.getConnection(& &&&&&&&&&&&jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL&,&sUsr,&sPwd);& &&&&&//&创建存储过程的对象& &&&&&CallableStatement&c&=&conn.prepareCall(&&{call&pro1(?)}&&);& &&&&&//&给Oracle存储过程的参数设置值&,将第一个参数的值设置成188& &&&&&c.setInt(1,&188);& &&&&&//&执行Oracle存储过程& &&&&&c.execute();& &&&&&conn.close();& &}& &} &
Ⅱ、JAVA调用Oracle存储过程【带输出参数的情况】
过程名称为pro2,参数个数2个,数据类型为整形数据,返回值为整形类型
import&java.sql.*;& &&public&class&ProcedureWithArgs&{& &public&static&void&main(String&args[])&throws&Exception&{& &&&&&//&加载Oracle驱动& &&&&&DriverManager.registerDriver(new&oracle.jdbc.driver.OracleDriver());& &&&&&//&获得Oracle数据库连接& &&&&&Connection&conn&=&DriverManager.getConnection(& &&&&&&&&&&jdbc:oracle:thin:@MyDbComputerNameOrIP:1521:ORCL&,&sUsr,&sPwd);& &&&&&//&创建Oracle存储过程的对象,调用存储过程& &&&&&CallableStatement&c&=&conn.prepareCall(&{call&pro2(?,?)}&);& &&&&&//&给Oracle存储过程的参数设置值&,将第一个参数的值设置成188& &&&&&c.setInt(1,&188);& &&&&&//&注册存储过程的第二个参数& &&&&&c.registerOutParameter(2,&java.sql.Types.INTEGER);& &&&&&//&执行Oracle存储过程& &&&&&c.execute();& &&&&&//&得到存储过程的输出参数值并打印出来& &&&&&System.out.println(c.getInt(2));& &&&&&conn.close();& &}& &} &
以上即是在JAVA中调用Oracle存储过程的最简单的实例。
【编辑推荐】
【责任编辑: TEL:(010)】
关于的更多文章
MariaDB是一个向后兼容、替代MySQL的数据库服务器。它包含所有主
数据库产品
数据库综合
数据库新闻
维基百科将切换到另外一款开源数据库MariaDB
本专题将带领大家走入MongoDB的世界,了解MongoDB是怎
SQL Server 2008提供了全民啊行的空间支持,但同时空
你的SQL Server代码安全吗?请你与我一起跟随作者来探
本书介绍如何将最流行的J2EE应用服务器WebLogic Server和最好的Java集成开发工具JBuilder结合起来开发J2EE应用,主要内容包括:W
51CTO旗下网站}

我要回帖

更多关于 c调用oracle存储过程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信