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

oraclejava调用存储过程

发布时间: 2022-07-26 23:51:08

① 如何使用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调用其存储过程

//通过编写的连接类创建一个连接
dbconn db = new dbconn();
Connection con1 = db.conn;
String callSQL1 = new String();
ResultSet rs1 = null;
//创建一个CallableStatement变量st1来调用存储过程信息
CallableStatement st1 = null;
try {
st1 = con1.prepareCall("{ call p(?,?,?,?) }");

st1.setString(1, "参数1");
st1.setString(2, "参数2");
st1.setString(3, "参数3");
st1.registerOutParameter(4,Types.INTEGER); //此处4 代表第一个"?" 则表示存储过程返回的值 这里要注意Types的类型,当需要有返回值时

st1.execute();
System.out.println(st1.getInt(4));//输出存储过程的返回值,当有返回值时
} catch (Exception error) {
try {
con1.rollback(); //操作不成功则回退
} catch (Exception ex9) {
ex9.printStackTrace();
}
out.print("系统出错" + error.getMessage());
} finally {
try {
if (st1 != null) {
st1.close();
}
} catch (Exception error) {

}
db.disconnect();
}

给你提供一个参考,希望楼主采纳。

③ 求java调用oracle存储过程

一:无返回值的存储过程
存储过程为:
CREATE OR REPLACE PROCEDURE TESTA(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS
BEGIN
INSERT INTO HYQ.B_ID (I_ID,I_NAME) VALUES (PARA1, PARA2);
END TESTA;
然后呢,在java里调用时就用下面的代码:
package com.hyq.src;
import java.sql.*;
import java.sql.ResultSet;
public class TestProcereOne {
public TestProcereOne() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: hyq ";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
CallableStatement cstmt = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, " hyq", " hyq ");
CallableStatement proc = null;
proc = conn.prepareCall("{ call HYQ.TESTA(?,?) }");
proc.setString(1, "100");
proc.setString(2, "TestOne");
proc.execute();
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
}
}
当然了,这就先要求要建张表TESTTB,里面两个字段(I_ID,I_NAME)。
二:有返回值的存储过程(非列表)
存储过程为:
CREATE OR REPLACE PROCEDURE TESTB(PARA1 IN VARCHAR2,PARA2 OUT VARCHAR2) AS
BEGIN
SELECT INTO PARA2 FROM TESTTB WHERE I_ID= PARA1;
END TESTB;
在java里调用时就用下面的代码:
package com.hyq.src;
public class TestProcereTWO {
public TestProcereTWO() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl ="jdbc:oracle:thin:@127.0.0.1:1521:hyq";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, " hyq", " hyq ");
CallableStatement proc = null;
proc = conn.prepareCall("{ call HYQ.TESTB(?,?) }");
proc.setString(1, "100");
proc.registerOutParameter(2, Types.VARCHAR);
proc.execute();
String testPrint = proc.getString(2);
System.out.println("=testPrint=is="+testPrint);
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
}
}
}
注意,这里的proc.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,如果out是在第一个位置,那就是proc.getString(1),如果是第三个位置,就是proc.getString(3),当然也可以同时有多个返回值,那就是再多加几个out参数了。
三:返回列表
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了.所以要分两部分,
1, 建一个程序包。如下:
CREATE OR REPLACE PACKAGE TESTPACKAGE AS
TYPE Test_CURSOR IS REF CURSOR;
end TESTPACKAGE;
2,建立存储过程,存储过程为:
CREATE OR REPLACE PROCEDURE TESTC(p_CURSOR out TESTPACKAGE.Test_CURSOR) IS
BEGIN
OPEN p_CURSOR FOR SELECT * FROM HYQ.TESTTB;
END TESTC;
可以看到,它是把游标(可以理解为一个指针),作为一个out 参数来返回值的。
在java里调用时就用下面的代码:
package com.hyq.src;
import java.sql.*;
import java.io.OutputStream;
import java.io.Writer;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import oracle.jdbc.driver.*;
public class TestProcereTHREE {
public TestProcereTHREE() {
}
public static void main(String[] args ){
String driver = "oracle.jdbc.driver.OracleDriver";
String strUrl ="jdbc:oracle:thin:@127.0.0.1:1521:hyq";
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(strUrl, "hyq","hyq");
CallableStatement proc = null;
proc = conn.prepareCall("{ call hyq.testc(?) }");
proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
proc.execute();
rs = (ResultSet)proc.getObject(1);
while(rs.next())
{
System.out.println("" + rs.getString(1) +""+rs.getString(2)+"");
}
}
catch (SQLException ex2) {
ex2.printStackTrace();
}
catch (Exception ex2) {
ex2.printStackTrace();
}
finally{
try {
if(rs != null){
rs.close();
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}
}
}
catch (SQLException ex1) {
}
}
}
}

④ 如何在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下实现调用oracle的存储过程和函数
在oracle下创建一个test的账户,然后按一下步骤执行:
1.创建表:STOCK_PRICES

--创建表格
CREATE TABLE STOCK_PRICES(
RIC VARCHAR(6) PRIMARY KEY,
PRICE NUMBER(7,2),
UPDATED DATE );

2.插入测试数据:

--插入数据
INSERT INTO stock_prices values('1111',1.0,SYSDATE);
INSERT INTO stock_prices values('1112',2.0,SYSDATE);
INSERT INTO stock_prices values('1113',3.0,SYSDATE);
INSERT INTO stock_prices values('1114',4.0,SYSDATE);

3.建立一个返回游标: PKG_PUB_UTILS

--建立一个返回游标
CREATE OR REPLACE PACKAGE PKG_PUB_UTILS IS
--动态游标
TYPE REFCURSOR IS REF CURSOR;
END PKG_PUB_UTILS;

4.创建和存储过程:P_GET_PRICE

--创建存储过程
CREATE OR REPLACE PROCEDURE P_GET_PRICE
(
AN_O_RET_CODE OUT NUMBER,
AC_O_RET_MSG OUT VARCHAR2,
CUR_RET OUT PKG_PUB_UTILS.REFCURSOR,
AN_I_PRICE IN NUMBER
)
IS
BEGIN
AN_O_RET_CODE := 0;
AC_O_RET_MSG := '操作成功';

OPEN CUR_RET FOR
SELECT * FROM STOCK_PRICES WHERE PRICE<AN_I_PRICE;
EXCEPTION
WHEN OTHERS THEN
AN_O_RET_CODE := -1;
AC_O_RET_MSG := '错误代码:' || SQLCODE || CHR(13) || '错误信息:' || SQLERRM;
END P_GET_PRICE;

5.创建函数:

--创建函数:F_GET_PRICE
CREATE OR REPLACE FUNCTION F_GET_PRICE(v_price IN NUMBER)
RETURN PKG_PUB_UTILS.REFCURSOR
AS
stock_cursor PKG_PUB_UTILS.REFCURSOR;
BEGIN
OPEN stock_cursor FOR
SELECT * FROM stock_prices WHERE price < v_price;
RETURN stock_cursor;

⑥ java调用oracle的存储过程

// 首先获得与数据库的连接
conn = DriverManager.getConnection (url, userName, userPwd);
CallableStatement proc = null;
proc = conn.prepareCall ("{call 数据库名称.存储过程名(?)}");// 一个问号表示传入一个参数
proc.setString(1,name); // name为你传入的参数
rs = proc.executeQuery(); // 执行sql语句,返回结果集

⑦ oracle数据库调用存储过程

这个需要分情况的
如果是在应用程序(Java等)中调用存储过程,需要根据相应语言的语法来进行。这个可以通过查找相应语言的帮助来找到。
如果是在Oracle的其他存储过程中调用,直接写存储过程名就可以了。传入相应的参数,即可执行。
如果在Oracle的命令行中,使用EXEC
存储过程名(参数)
的方式即可调用。
如果存储过程执行的语句写在SQL文件中,则可以通过调用文件的方式执行,即
SQL>
@D:\SQL\example.sql的形式

⑧ 在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存储过程。

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
热点内容
安卓系统怎么注册不了ins 发布:2024-05-19 14:01:00 浏览:960
买服务器后怎么搭建功能 发布:2024-05-19 14:00:03 浏览:207
windows文件夹图标下载 发布:2024-05-19 13:25:44 浏览:689
数据库存储数据类型 发布:2024-05-19 13:25:28 浏览:584
电脑开机密码忘记了如何解锁没有管理员窗口 发布:2024-05-19 13:24:50 浏览:277
畅捷支付刷脸机如何设置密码 发布:2024-05-19 13:03:10 浏览:764
java麻将 发布:2024-05-19 13:03:00 浏览:433
存储过程大数据游标 发布:2024-05-19 13:00:50 浏览:515
内存存储价格 发布:2024-05-19 13:00:48 浏览:389
隔离期的算法 发布:2024-05-19 12:55:13 浏览:530