在java中使用CallableStatement调用存储过程

列:

创建需要的测试表:create table Test(tid varchar2(10),tname varchar2(10));

第一种情况:无返回值。

create or replace procedure test_a(param1 in varchar2,param2 in varchar2) as

begin

  insert into test value(param1,param2);

end;

java调用代码:

package com.test;

import java.sql.*;

import java.io.*;

import java.sql.*;

public class TestProcA{

  public TestProcA(){}

  public static void main(String []args){

    ResultSet rs=null;

    Connection conn=null;

    CallableStatement proc=null;

    try{

      Class.forName("oracle.jdbc.driver.OracleDriver");

      conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test","test","test");

      proc=conn.prepareCall("{call test_a(?,?)}");

      proc.setString(1,"1001");

      proc.setString(2,"TestA");

      proc.execute();

    }catch(Exception e){

      e.printStackTrace();

    }finally{

      try{

        if(null!=rs){

          rs.close();

        }

        if(null!=proc){

          proc.close();

        }

        if(null!=conn){

          conn.close();

        }

      }catch(Exception e){

         e.printStackTrace();

      }

    }

  }

}

第二种情况:有返回值的存储过程(返回值非列表)

存储过程为:

create or replace procedure test_b(param1 in varchar2,param2 out varchar2)

as

begin

select tname into param2 from test where tid=param1;

end;

java调用代码:

package com.test;

import java.sql.*;

import java.io.*;

import java.sql.*;

public class TestProcB{

  public TestProcB(){}

  public static void main(String []args){

    Connection conn=null;

    CallableStatement proc=null;

    try{

      Class.forName("oracle.jdbc.driver.OracleDriver");

      conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test","test","test");

      proc=conn.prepareCall("{call test_b(?,?)}");

      proc.setString(1,"1001");

      proc.registerOutParameter(2,Types.VARCHAR);

      proc.execute();

      system.out.println("Output is:"+proc.getString(2));

    }catch(Exception e){

      e.printStackTrace();

    }finally{

      try{

        if(null!=proc){

          proc.close();

        }

        if(null!=conn){

          conn.close();

        }

      }catch(Exception e){

        e.printStackTrace();

      }

    }

  }

}

第三种情况:返回列表

由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,必须要用package了,要分两部分来写:

create or replace package tpackage as

type t_cursor is ref cursor;

procedure test_c(c_ref out t_cursor);

end;

create or replace package body tpackage as

procedure test_c(c_ref out t_cursor) is

begin

open c_ref for select * from test;

end test_c;

end tpackage;

java调用代码:

package com.test;

import java.sql.*;

import java.io.*;

import java.sql.*;

public class TestProcB{

  public TestProcB(){}

  public static void main(String []args){

    Connection conn=null;

    CallableStatement proc=null;

    ResultSet rs =null;

    try{

      Class.forName("oracle.jdbc.driver.OracleDriver");

      conn=DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:test","test","test");

      proc=conn.prepareCall("{?=call tpackage.test_b(?)}");

      proc.registerOutParameter(1,OracleTypes.CURSOR);

      proc.execute();

      while(rs.next()){

         system.out.println(rs.getObject(1)+"\t"+rs.getObject(2));

      }

         }catch(Exception e){

      e.printStackTrace();

    }finally{

      try{

        if(null!=rs){

          rs.close();

        }

        if(null!=proc){

          proc.close();

        }

        if(null!=conn){

          conn.close();

        }

      }catch(Exception e){

        e.printStackTrace();

      }

    }

  }

}

java中如何调用oracle存储过程的更多相关文章

  1. Java调用oracle存储过程通过游标返回临时表数据

    注:本文来源于 <  Java调用oracle存储过程通过游标返回临时表数据   > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...

  2. 用java 调用oracle存储过程总结

    SSM-Mybatis调用Oracle存储过程返回结果集(游标)示例 https://www.jianshu.com/p/0ae6d9d66d61 用java调用oracle存储过程总结 //1.ca ...

  3. MyBatis调用Oracle存储过程

    MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...

  4. 在Java中直接调用js代码(转载)

    http://blog.csdn.net/xzyxuanyuan/article/details/8062887 JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Ja ...

  5. 在Java中直接调用js代码

    JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert ...

  6. 123 c#调用oracle存储过程返回数据集 --通过oracle存储过程返回数据集

    c#调用oracle存储过程返回数据集 2008-12-20 10:59:57|  分类: net|字号 订阅   CREATE OR REPLACE PACKAGE pkg_tableTypeIS  ...

  7. c#调用oracle存储过程返回数据集

    c#调用oracle存储过程返回数据集 2008-12-20 10:59:57|  分类: net|字号 订阅   CREATE OR REPLACE PACKAGE pkg_tableTypeIS  ...

  8. C#调用Oracle存储过程的方法

    C#调用Oracle存储过程的方法 准备: 环境:pl/sql+oracle9i+vs2008 创建表test: create table TEST(  ID      NUMBER,//编号  NA ...

  9. Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例

    Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13|  分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...

随机推荐

  1. 高性能PHP日志插件--Seaslog

    日志系统作为记录系统运行的信息,包括 用户输入,安全日志等,日志系统是不能影响用户的使用. 为什么需要记录日志? 既然日志系统增加了整个系统的开销,为什么我还需要它,这是因为日志能帮我们记录运行的很多 ...

  2. 添加jar

    file->project structure->'+'添加jar 在.gradle中配置

  3. css pre如果同时运用了css的border-radius、 overflow两个属性且标签中内容太多时,外部div滚动条在firefox下滚动时很卡

    pre如果同时运用了css的border-radius. overflow两个属性且标签中内容太多时,外部div滚动条在firefox下滚动时很卡. 解决方法:去掉css中border-radius. ...

  4. 关于python的面向对象编程

    先写上代码,有代码才好理解: #filename:classdemo.py class test: '''just person''' a=1 b=2 c=0 def __init__(self): ...

  5. Method Resolution Order – Python类的方法解析顺序

    在支持多重继承的编程语言中,查找方法具体来自那个类时的基类搜索顺序通常被称为方法解析顺序(Method Resolution Order),简称MRO.(Python中查找其它属性也遵循同一规则.)对 ...

  6. mysql 在启动时配置文件的查找方式

    知识储备: 1.mysql在启动时会去多个地方找它的配置文件,当然啦这些也都是可以从帮助中找到的,问题在于我们要知道怎么找到对应的帮助才行啊 实战: [root@workstudio data]# m ...

  7. Clojure操作mysql

    在Eclipse中新建一个Clojure工程clj01 clojure 操作mysql需要依赖mysql-connector-java.clojure-contrib与java.jdbc三个jar包. ...

  8. POJ 2417 Discrete Logging

    http://www.cnblogs.com/jianglangcaijin/archive/2013/04/26/3045795.html 给p,a,b求a^n==b%p #include<a ...

  9. Keil C51 与 ARM 并存的方法

    很多朋友都在想,怎么让keil C51与ARM能够并存使用.有安装经验的朋友都知道,安好C51后再安ARm,C51不能正常工作:安好ARM后再安C51,ARM不能正常工作. 网上也有相关解决办法,不过 ...

  10. 三 ICE开发初级研究

    http://www.acejoy.com/bbs/viewthread.php?tid=2878&extra=page%3D1 ICE开发初级研究(一) 最近一段一直在忙于工作,事情比较多, ...