一、无返回值的存储过程
存储过程为:(该过程为向dept添加部门)
create or replace procedure adddept(deptno number,dname varchar2,loc varchar2)
as
begin
if deptno is not null then
insert into dept values(deptno,dname,loc);
commit;
else
null;
end if;
end adddept;
/
然后在JAVA里调用就用下面的代码
public class TestProcedure{
Connection conn = null;
CallabledStatement cstmt = null;
PreparedStatement pstmt = null;
String url=”jdbc:oracle:thin:@localhost:1521:mydb”;
String driver=”oracle.jdbc.driver.OracleDriver”;
String name=””
public TestProcedure {
try{
Class.forName(dirver);
Conn=DriverManager.getConnection(url,”scott”,”tiger”);
cstmt=conn,prepareCall(“{call adddept(?,?,?)}”);
cstmt.setInt(1,80);
cstmt.setString(2,”总部”);
cstmt.setString(3,”beijing”);
cstmt.executeUpdate();
Systemt.out.println(“success”);
}catch(Exception e){
e.printStackTrace();
}finally{
cstmt.close();
conn.close();
}
}
}
【注:dept表为oracle数据库方案scott中的一个表】
二、有返回值的存储过程(非列表)
IN表示向存储过程传递参数,OUT表示从存储过程返回参数
存储过程为:(根据雇员号查工资)
create or replace procedure selemp_sal (para1 in number,para2 out number)
as
begin
select sal into para2 from emp where empno=para1;
end selemp_sal;
/
在数据库的SQL窗口中调用:
declare
vstr2 varchar2(10);
begin
selemp_sal(7654,vStr2);--//7654为雇员号
dbms_output.put_line(vStr2);
end;
在JAVA里调用就用下面的的代码:
public class SelSalary(){
public SelSalary(){}//构造函数
public static void main(String[] args){
String driver=”oracle.jdbc.driver.OracleDriver”;
String url=”jdbc:oracle:thin:@localhost:1521:mydb”;
Statement stmt=null;
ResuultSet rs=null;
Connection conn=null;
try{
Class.forName(driver);
conn=DriverManager.getConnection(url,”scott”,”tiger”);
CallableStatement cstmt=null;
cstmt=conn..prepareCall(“{call selemp_sal(?,?)}”);
cstmt..setInt(1,7654);
cstmt.registerOutparameter(2,Types.VARCHAR);
cstmt.execute();
String thesal=cstmt.getString(2);
System.out.pringln(“The people’s salary is ”+thesal);
}catch(Exception ex){
ex.printStatckTrace();
}finally{
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(conn!=nill) conn.close();
}
}
}
}
【注:emp表为oracle数据库方案scott中的一个表,
这里的cstmt.getString(2) 中的数值2并非任意的,而是和存储过程的out列对应的,如果out是在第一个位置,那就是cstmt.getString(1),如果out是在第三个位置,那就是cstmt.getString(3),当然可以有多个返回值,那就是多增加几个out参数啦】
三、返回列表
由于oracle 存储过程没有返回值,他的所有返回值都是通过out参数来替代的,列表也同样不例外,但由于是集合,所以不能用一般的参数,必须要用pagkage了,所以要分两部分,
1. 建立一个程序包,如下:
create or replace package mypackage as
TYPE my_cursor is REF CURSOR;
end mypackage;
2.建立存储过程,存储过程为:(查询工资等级)
create or replace procedure selsal_grade (p_cur out mypackage.my_cursor)
as
begin
open p_cur for select * from salgrade;
end selsal_grade;
可以看到,它把一个游标(可以理解为一个指针),作为一个out参数来返回的
在Oracle的SQL窗口中调用用下面的代码:
declare
v_cur mypackage.my_cursor;
grad salgrade%rowtype;
begin
selsal_grade(v_cur);
dbms_output.put_line('等级 最高工资 最低工资');
loop
fetch v_cur into grad;
exit when v_cur%NOTFOUND;
dbms_output.put_line(grad.grade||' '||grad.losal||' '||grad.hisal);
end loop;
--dbms_output.put_line(v_cur%rowcount);
close v_cur;
end;
在JAVA里调用就用下面的代码:
public class selectGrade(){
public selectGrade(){};//构造函数
public static void main(String[] args){
String driver=”oracle.jdbc.driver.OracleDriver”;
String url=”jdbc:oracle:thin:@localhost:1521:mydb”;
Statement stmt=null;
ResuultSet rs=null;
Connection conn=null;
try{
Class.forName(driver);
conn=DriverManager.getConnection(url,”scott”,”tiger”);
CallableStatement cstmt=null;
cstmt=conn..prepareCall(“{call selsal_grade (?)}”);
cstmt.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR);
cstmt.execute();
rs=(ResultSet) cstmt.getObject(1);
System.out.println(“等级 最高工资 最低工资”);
while(rs.next())
{
System.out.println(rs.getString(1)+” ”|+rs.getString(2)+” ”+rs.getString(3));
}
}catch(Exception e)
{
e.printStackTrace();
} finally{
if(rs!=null) rs.close();
if(stmt!=null) stmt.close();
if(conn!=nill) conn.close();
}
}
}
相关推荐
### JAVA调用存储过程知识点详解 #### 一、无结果集返回的存储过程调用 在Java中调用不返回结果集的存储过程时,主要步骤包括建立连接、准备调用语句、设置输入参数、执行存储过程以及处理可能产生的警告信息。 1...
值得注意的是,上述代码中的文件名列表(如Project1.cfg、Unit1.dcu等)与Java调用存储过程无关,它们看起来像是Delphi或FreePascal项目的文件,这些文件通常用于描述项目配置、单元信息、表单布局等,而不是与Java...
### Java调用存储过程实例:详解 #### 存储过程简介 存储过程是一种在数据库中编写的SQL程序,可以接受输入参数,执行一系列操作,并返回结果或输出参数。它们可以提高应用程序的性能、安全性和复用性。在Oracle...
总之,调用存储过程是Java开发中处理数据库操作的重要环节。理解如何设置`IN`和`OUT`参数,并正确地执行和获取结果,将有助于提高代码的效率和可维护性。希望这个详细讲解对你有所帮助,如果你在实践中遇到任何问题...
java调用存储过程,支持获取return值,output返回值,以及查询的表数据,表数据允许有多个查询结果集
总结来说,Java调用存储过程并处理返回数组,需要理解存储过程的定义,正确使用`CallableStatement`或其子类如`OracleCallableStatement`,以及处理Oracle特定数据类型的方法。通过这些技巧,我们可以有效地在Java...
Java调用存储过程是数据库操作中的常见任务,特别是在复杂业务逻辑和数据处理中。存储过程是一种预编译的SQL语句集合,可以在数据库服务器端执行,提高了效率并减少了网络通信量。本文将详细讲解Java如何调用存储...
### Java调用存储过程——传入集合参数:深入解析与实践 #### 核心知识点概览 在Java应用中,调用数据库存储过程时,往往需要处理复杂的参数传递,特别是当参数为集合类型时,这一过程变得更加具有挑战性。本文将...
Java 调用存储过程小结 Java 调用存储过程是指在 Java 程序中调用数据库中的存储过程,以便实现复杂的业务逻辑和数据处理。存储过程是指保存在数据库并在数据库端执行的程序,可以使用特殊的语法在 Java 类中调用...
### Java调用存储过程的两种方法 在Java中调用数据库中的存储过程是常见的操作之一,这不仅可以提高程序性能和代码可维护性,还可以更好地利用数据库的功能。根据提供的标题、描述以及部分内容,本文将详细介绍Java...