在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. (原+转)pycharm中使用caffe

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5896446.html 参考网址: http://www.th7.cn/Program/Python/2 ...

  2. 使用xml及java代码混合的方式来设置图形界面

    参考<疯狂android讲义>第2版2.1节 设置android的图形界面有三种方法: 1.使用纯xml文件 2.使用纯java,代码臃肿复杂,不建议使用 3.使用xml与java混合,前 ...

  3. Roads in the North(POJ 2631 DFS)

    Description Building and maintaining roads among communities in the far North is an expensive busine ...

  4. Smallest Difference(POJ 2718)

    Smallest Difference Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6740   Accepted: 18 ...

  5. 二维码识别:Halcon与C++中多字节环境下的字节编码格式设置和转换

    Halcon环境下可通过设置set_system(‘filename_encoding’, ‘utf8’),可以将二维码的识别结果解析出汉字. VS环境下则需要将utf8转换成gbk格式.代码如下: ...

  6. 从一道面试题谈linux下fork的运行机制

    http://www.cnblogs.com/leoo2sk/archive/2009/12/11/talk-about-fork-in-linux.html

  7. Match类

    Regex在匹配的时候,常常会返回一个Match类的对象,今天就来看看怎么玩这个对象. 一.属性 Captures 按从里到外.从左到右的顺序获取由捕获组匹配的所有捕获的集合(如果正则表达式用 Reg ...

  8. Mybatis的连接池

    先总结一个原则:mytatis的连接池最大值poolMaximumActiveConnections尽量跟服务器的并发访问量持平以至于大于并发访问量. 原因:在org.apache.ibatis.da ...

  9. ServerProperties

    Spring Boot 其默认是集成web容器的,启动方式由像普通Java程序一样,main函数入口启动.其内置Tomcat容器或Jetty容器,具体由配置来决定(默认Tomcat).当然你也可以将项 ...

  10. 用试探回溯法解决N皇后问题

    学校数据结构的课程实验之一. 数据结构:(其实只用了一个二维数组) 算法:深度优先搜索,试探回溯 需求分析: 设计一个在控制台窗口运行的“n皇后问题”解决方案生成器,要求实现以下功能: 由n*n个方块 ...