在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. (原+转)VS2013:正在从以下位置加载符号

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5158020.html 这段时间启动调试时,vs2013加载时间很长很长...然后下面网址给出了解决方法 ...

  2. 整不明白Jquery的问题

    最近写个GridView,由于不是很熟悉javascript,用jquery实现后,发现下面设置左右表行高的代码如果不把行保存在$tr1,$tr2中再设置css,速度非常慢,300行50列左右的数据得 ...

  3. entity framework 6 通用数据类

    原文  http://blog.csdn.net/laokaizzz/article/details/25730813 public class BaseDAL { string strConn = ...

  4. python之第一个例子hello world

    python用缩进(四个空格,不是teble)来区分代码块 1. coding=utf-8    字符编码,支持汉字 #!/usr/bin/env python# coding=utf-8print ...

  5. underscoreJS的Collections 的API

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. java设计模式--行为型模式--备忘录模式

    备忘录模式,我们平常所做的备忘录么.还得深深研究哦. 备忘录模式: 备忘录模式 概述 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状 ...

  7. 探索PHP+Nginx(一) 安装Linux操作系统

    每次学习一种新的开发语言的时候,都要经历一个很纠结的过程,除非你运气很好或者准备工作充分,否则你在这个过程中总会耗费大量的时间和精力,当然你也会受益很多.而这个过程就是,开发环境的基础搭建,看似是装几 ...

  8. HTML5 Canvas Arc Tutorial

    HTML5 Canvas Arc Tutorial HTML5 Canvas Arc Tutorial  

  9. hdu 4751 Divide Groups(dfs染色 或 2-sat)

    Problem Description   This year is the 60th anniversary of NJUST, and to make the celebration more c ...

  10. C# Lazy<T>(转)

    本文来自:http://www.cnblogs.com/zhangpengshou/archive/2012/12/10/2811765.html .NET Framework 4 在一次次跳票中终于 ...