当前位置:首页 » 存储配置 » oracle存储过程调用java

oracle存储过程调用java

发布时间: 2023-01-06 19:25:01

java调用oracle存储过程

/*这是我的一个调用Oracle procere 的一个class test*/
package com.sp;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.*;

public class Test_fenye {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Connection ct;
CallableStatement cs;
// TODO Auto-generated method stub
try{
//加载驱动
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//建立连接
ct= DriverManager.getConnection("jdbc:odbc:testsp","scott","tiger");
//创建callablestatement调用存储过程
cs=ct.prepareCall("{call pro_fenye(?,?,?,?,?,?)}");
//给前三个in输入 ?赋值,后三个为out返回参数
cs.setString(1, "emp");
cs.setInt(2, 5);
cs.setInt(3, 1);
//注册
cs.registerOutParameter(4, oracle.jdbc.OracleTypes.INTEGER);
cs.registerOutParameter(5, oracle.jdbc.OracleTypes.INTEGER);
cs.registerOutParameter(6, oracle.jdbc.OracleTypes.CURSOR);
//执行
cs.execute();
//取出值
int rowNum=cs.getInt(4);
int pagecount=cs.getInt(5);
ResultSet rs =(ResultSet)cs.getObject(6);

System.out.println("rownumber "+ rowNum);
System.out.println("pagecount "+pagecount);
}catch(Exception ex){
ex.printStackTrace();
}
}

}

② 如何使用java语言调用oracle存储过程

1.api上的方法为 Connection.prepareCall(java.lang.String)
2.prepareCall(String sql)
throws SQLException
参数:sql - 可以包含一个或多个 '?' 参数占位符的 SQL 语句。通常此语句是使用 JDBC 调用转义语法指定的。
3.JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。分别为:
{?= call <procere-name>[(<arg1>,<arg2>, ...)]}
{call <procere-name>[(<arg1>,<arg2>, ...)]}

4.示例,无返回值调用:Connection.prepareCall({ call p_test(p1,p2)})

③ 如何在Oracle中使用Java存储过程

通常有三种方法来创建java存储过程。

1. 使用oracle的sql语句来创建:

e.g. 使用create or replace and compile java source named "<name>" as

后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。

SQL>"javademo1"
as
importjava.sql.*;
publicclassJavaDemo1
{
publicstaticvoidmain(String[]argv)
{
System.out.println("hello,javademo1");
}
}
/

Java已创建。

SQL>showerrorsjavasource"javademo1"
没有错误。

SQL>
as
languagejavaname'JavaDemo1.main(java.lang.String[])';
/

过程已创建。

SQL>setserveroutputon
SQL>calljavademo1();

调用完成。

SQL>calldbms_java.set_output(5000);

调用完成。

SQL>calljavademo1();
hello,javademo1

调用完成。

SQL>calljavademo1();
hello,javademo1
调用完成。

2. 使用外部class文件来装载创建

e.g. 这里既然用到了外部文件,必然要将class文件放到oracle Server的某一目录下边。

publicclassOracleJavaProc
{
publicstaticvoidmain(String[]argv)
{
System.out.println("It'saJavaOracleprocere.");
}
}


SQL>;

授权成功。

SQL>connscott/[email protected]
已连接。
SQL>createorreplacedirectorytest_diras'd:/oracle';

目录已创建。

SQL>(test_dir,'OracleJavaProc.CLASS')
2/

Java已创建。

SQL>'OracleJavaProc.main(java.lang.String[])';
2/

过程已创建。

SQL>calltestjavaproc();

调用完成。

SQL>executetestjavaproc;

PL/SQL过程已成功完成。

SQL>setserveroutputonsize5000
SQL>calldbms_java.set_output(5000);

调用完成。

SQL>executetestjavaproc;
It'saJavaOracleprocere.

3. 我推荐的一种方法,直接使用loadjava命令远程装载并创建。
先创建一个类, e.g.

importjava.sql.*;
importoracle.jdbc.*;

publicclassOracleJavaProc{

//Addasalgradetothedatabase.
publicstaticvoidaddSalGrade(intgrade,intlosal,inthisal){

System.out.println("...");

try{
Connectionconn=
DriverManager.getConnection("jdbc:default:connection:");

Stringsql=
"INSERTINTOsalgrade"+
"(GRADE,LOSAL,HISAL)"+
"VALUES(?,?,?)";
PreparedStatementpstmt=conn.prepareStatement(sql);
pstmt.setInt(1,grade);
pstmt.setInt(2,losal);
pstmt.setInt(3,hisal);
pstmt.executeUpdate();
pstmt.close();
}
catch(SQLExceptione){
System.err.println("ERROR!AddingSalgrade:"
+e.getMessage());
}
}
}

使用loadjava命令将其装载到服务器端并编译

D:eclipse3.1workspacedbtest>loadjava-uscott/[email protected]

acleJavaProc.java

arguments:'-u''scott/[email protected]'-v''-resolve''OracleJavaProc.java'

creating:sourceOracleJavaProc

loading:sourceOracleJavaProc

resolving:sourceOracleJavaProc

查询一下状态:

连接到:
.2.0.1.0-Proction
WiththePartitioning,
JServerRelease9.2.0.1.0-Proction

SQL>SELECTobject_name,object_type,statusFROMuser_objectsWHEREobject_typeLIKE'JAVA%';

OBJECT_NAME
--------------------------------------------------------------------------------

OBJECT_TYPESTATUS
--------------------------------------------------
OracleJavaProc
JAVACLASSVALID

OracleJavaProc
JAVASOURCEVALID

测试一下存储过程:

SQL>createorreplaceprocereadd_salgrade(idnumber,losalnumber,hisalnum
ber)aslanguagejavaname'OracleJavaProc.addSalGrade(int,int,int)';
2/

过程已创建。

SQL>setserveroutputonsize2000
SQL>calldbms_java.set_output(2000);

调用完成。

SQL>executeadd_salgrade(6,10000,15000);
...

PL/SQL过程已成功完成。

SQL>select*fromsalgradewheregrade=6;

GRADELOSALHISAL
------------------------------
61000015000

④ 在Oracle中用java编写存储过程

Oracle自带一个JVM 内置对Java的支持 任何Java能做的事情你都可以放到Oracle里面来做 你甚至可以在里面操作db 这让Oracle具备了极其巨大的扩展能力 只要你愿意 完全可以开发一个trigger 让它在适当的时候给管理员的msn发送一条即时消息

由于ps/SQL是过程化的语言 它基本上不具备多态的概念 供Oracle使用的Java方法必须申明为static 所以在Oracle中你无法使用Java的动态特性 比如接口 反射等 不过这并不妨碍你用Java *** 做的事

我们以一个简单的hello world为例 我想任何一个有经验的Java程序员都能够通过这个例子 派生出其他希奇古怪的应用 有好的创意记得要与我共享 我的msn是

首先是创建一个Java类 启动SQL plus 执行如下命令

create or replace and pile java source named hello_sp as

package bromon oracle;

public class Hello

{

public static String say(String name)

{

return 你好 +name;

}

}

Java程序已创建

然后在Oracle中把这个类导入成为一个函数 执行命令

create or replace function hello_sp(name varchar ) return varchar

as language java name

bromon oracle Hello say(java lang String) return java lang String ;

函数已创建

现在可以调用该函数 执行

select hello( bromon ) from al;

返回结果 你好 bromon

有一个需要注意的问题是 假如我们的java方法是没有参数的 比如

public static String say()

{

return 你好 ;

}

那么在创建函数的时候 函数名不应该有扩号 hello_sp 否则会报告函数有编译错误

如果你的Java类是在IDE里面编写的 那么只需要在oracle中加载编译过的class文件即可 方法是

lishixin/Article/program/Oracle/201311/18111

⑤ 关于oracle存储过程调用java(在线等)

1、创建或者代替已有的目录。目录名为test_dir,路径为d:\的目录;
2、使用bfile来创建或者代替目录test_dir下的TEST.CLASS的java的类文件
3、查询object_name,object_type,STATUS这三个字段在 user_objects里的数据
4、用java语言调用名称为'TEST.main(java.lang.String[])'来创建或者代替已有的存储过程test_java

其实就是:首先创建一个目录test_dir,路径d:\,然后就在目录名为test_dir下生成test.class(类似于JAVAC这样)然后就创建test_java存储过程,把test.class里面的内容放到到test_java存储过程里面

个人理解,如有误,欢迎指出。

⑥ 如何在Oracle中使用Java存储过程

给你一个简单的例子(其实自己搜索:oracle数据库 java存储过程 就可以了)
使用oracle的sql语句来创建:
e.g. 使用create or replace and compile java source named "<name>" as
后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。
SQL> create or replace and compile java source named "javademo1"
2 as
3 import java.sql.*;
4 public class JavaDemo1
5 {
6 public static void main(String[] argv)
7 {
8 System.out.println("hello, java demo1");
9 }
10 }
11 /
Java 已创建。
SQL> show errors java source "javademo1"
没有错误。
SQL> create or replace procere javademo1
2 as
3 language java name 'JavaDemo1.main(java.lang.String[])';
4 /
过程已创建。
SQL> set serveroutput on
SQL> call javademo1();
调用完成。
SQL> call dbms_java.set_output(5000);
调用完成。
SQL> call javademo1();
hello, java demo1
调用完成。
SQL> call javademo1();
hello, java demo1
调用完成。

⑦ JAVA调用ORACLE存储过程

给你个方法,自己参研吧。
private static final String DELETE_ENTRIES_BY_DATE_RANGE_SPNAME = "";

public int deleteByDateRange(Date start, Date end) {
// get connection
Connection conn = getConnection();
try {
// set auto commit false
conn.setAutoCommit(false);
// retrieve callableStatement by
CallableStatement cs = prepareCallableStatement(conn,
);
cs.setString("application_name", applicationName);
cs.setString("mole_name", moleName);
cs.setDate("startDate", Util.convUtilDateToSqlDate(start));
cs.setDate("endDate", Util.convUtilDateToSqlDate(end));

cs.registerOutParameter("deleted_rows", java.sql.Types.INTEGER);

cs.execute();

int affectedRows = cs.getInt("deleted_rows");
// transaction commit
conn.commit();
// close cs
cs.close();

return affectedRows;

⑧ 如何在ORACLE中使用JAVA存储过程

比如下面写的是Oracle的一个存储过程:
create or replace procere queryempinfo(eno in number,
pename out varchar2,
psal out number,
pjob out varchar2)
as
begin
--得到该员工的姓名 月薪和职位
select ename, sal, job into pename, psal, pjob from emp where empno = eno;
end;

Java调用Oracle的存储过程
try {
Class.forName(driverName);
conn = DriverManager.getConnection(url, username, password);
stat = conn.prepareCall(sql);

// 一个输入参数和三个输出参数
stat.setInt(1, 7566);
stat.registerOutParameter(2, OracleTypes.VARCHAR);
stat.registerOutParameter(3, OracleTypes.NUMBER);
stat.registerOutParameter(4, OracleTypes.VARCHAR);
stat.execute();

String name = stat.getString(2);
int sal = stat.getInt(3);
String job = stat.getString(4);

System.out.println("name: " + name + ", sal: " + sal + ", job: " + job);

} catch (Exception e) {
e.printStackTrace();
} finally {
close(conn, stat, rs);
}

⑨ 在java 怎样调用oracle存储过程

java.sql
里面的

public interface CallableStatement

extends PreparedStatement

用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS
使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,则必须将其注册为 OUT
参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个参数的编号是 1。
{?= call <procere-name>[(<arg1>,<arg2>, ...)]}
{call <procere-name>[(<arg1>,<arg2>, ...)]}

⑩ 关于ORACLE存储过程或触发器调用JAVA类的问题

不知道你具体需求,做了JAVA开发5年从没这么干过,一般都是java调存储过程然后把数据拿回来,这么反正调我是没干过。
你那个存储过程调JAVA的就这一句么?
create or replace procere javademo1
as
language java name 'JavaDemo1.main(java.lang.String[])';
你这句话前面应该有个创建目录和指定java class路径的语句吧,如果都没错那就
execute javademo1; 执行这个存储过程就会看到java类里输出的那句话了啊。
你要是成功输出java打印的语句就是调用成功了 ,那你就在那方法体里写你要调用的Action了呗,那就随你怎么干了想调啥调啥

热点内容
如何查看radmin密码 发布:2024-05-10 23:52:03 浏览:798
用云服务器搭建外网教学 发布:2024-05-10 23:31:10 浏览:386
edimax打印服务器设置ip 发布:2024-05-10 23:29:51 浏览:370
联通的网关初始密码是多少 发布:2024-05-10 23:16:57 浏览:719
哪个手机品牌综合配置好 发布:2024-05-10 22:54:45 浏览:882
怎么解绑手机号微信账号密码 发布:2024-05-10 22:49:42 浏览:719
龙芯机器可以cef编译吗 发布:2024-05-10 22:40:48 浏览:157
犀牛如何编程 发布:2024-05-10 22:35:54 浏览:306
php类递归 发布:2024-05-10 22:33:55 浏览:6
android连接ubuntu 发布:2024-05-10 22:30:15 浏览:406