在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. YUI Array 之 indexOf(索引值|搜索)

    YUI原码 YUI indexOfYArray.indexOf = Lang._isNative(Native.indexOf) ? function (array, value, from) { r ...

  2. awk之7 常用函数的解析

    1.区域获取 substr(区域f,起始位置n1,获取范围n2) 解析:获取某个区域f内,从起始位置n1开始算起的n2个字符组成的字符串.如果n2不存在,则返回从n1开始到区域结束的内容. 例子:获取 ...

  3. LFS,编译自己的Linux系统 - 准备

    概述 现在用的操作系统是Win8.1,用VMware创建一个虚拟机,3G内存(物理内存是6G,分一半),23G硬盘,其中3G用于swap分区,10G用于host system,10G用于建立LFS系统 ...

  4. Eclipse调试Bug的七种常用技巧(转)

        注意事项及小结: (1)Line Breakpoint:如果设置Conditional,监控的变量需要比当前行高一级block,譬如for(int i=0;i<20;i++)中的i,fo ...

  5. shell printf格式化输出语句

    printf 命令用于格式化输出, 是echo命令的增强版.它是C语言printf()库函数的一个有限的变形,并且在语法上有些不同. 注意:printf 由 POSIX 标准所定义,移植性要比 ech ...

  6. css案例学习之div ul li a 实现导航效果

    效果 代码 <html> <head> <title>无需表格的菜单</title> <style> body{ background-co ...

  7. 2014.8.3情人节欢乐赛【Benny的农场】

    Benny的农场 (farm.pas/.c/.cpp) 时间限制:1s.空间限制:128MB 题目描述: Benny有一片农田需要灌溉.农田的形状为矩形,并被分为许多小块.每一块中都有一些水管.共有1 ...

  8. EXT JS 4.3 在线学习

    官网地址:http://docs.sencha.com/extjs/4.1.3/ 相关示例:http://docs.sencha.com/extjs/4.1.3/#!/example Examples ...

  9. IOS Xmpp的Iq发送和解析之请求讨论组成员

    #pragma mark - 获取讨论组成员 - (void)getDiscussionMemberInfoWithSendIq:(discussionModel *)data { NSXMLElem ...

  10. Object-c学习之路九(字典(NSDictionary&NSMutableDictionary))

    字典的练习和使用(遍历,搜索...)(Student和Book类文件可以查看上篇博客这次不上传了.) // // main.m // NSDictionary // // Created by Wil ...