java中如何调用oracle存储过程
在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存储过程的更多相关文章
- Java调用oracle存储过程通过游标返回临时表数据
注:本文来源于 < Java调用oracle存储过程通过游标返回临时表数据 > Java调用oracle存储过程通过游标返回临时表数据 项目开发过程中,不可避免的会用到存储过程返回结 ...
- 用java 调用oracle存储过程总结
SSM-Mybatis调用Oracle存储过程返回结果集(游标)示例 https://www.jianshu.com/p/0ae6d9d66d61 用java调用oracle存储过程总结 //1.ca ...
- MyBatis调用Oracle存储过程
MyBatis调用Oracle存储过程 1.无输入和输出参数的存储过程 2.带有输入和输出参数的存储过程 3.返回游标的存储过程 mybatis中的配置文件代码 <resultMap type= ...
- 在Java中直接调用js代码(转载)
http://blog.csdn.net/xzyxuanyuan/article/details/8062887 JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Ja ...
- 在Java中直接调用js代码
JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: “alert ...
- 123 c#调用oracle存储过程返回数据集 --通过oracle存储过程返回数据集
c#调用oracle存储过程返回数据集 2008-12-20 10:59:57| 分类: net|字号 订阅 CREATE OR REPLACE PACKAGE pkg_tableTypeIS ...
- c#调用oracle存储过程返回数据集
c#调用oracle存储过程返回数据集 2008-12-20 10:59:57| 分类: net|字号 订阅 CREATE OR REPLACE PACKAGE pkg_tableTypeIS ...
- C#调用Oracle存储过程的方法
C#调用Oracle存储过程的方法 准备: 环境:pl/sql+oracle9i+vs2008 创建表test: create table TEST( ID NUMBER,//编号 NA ...
- Oracle创建表语句(Create table)语法详解及示例、、 C# 调用Oracle 存储过程返回数据集 实例
Oracle创建表语句(Create table)语法详解及示例 2010-06-28 13:59:13| 分类: Oracle PL/SQL|字号 订阅 创建表(Create table)语法详解 ...
随机推荐
- (原+转)VS2013:正在从以下位置加载符号
转载请注明出处: http://www.cnblogs.com/darkknightzh/p/5158020.html 这段时间启动调试时,vs2013加载时间很长很长...然后下面网址给出了解决方法 ...
- 整不明白Jquery的问题
最近写个GridView,由于不是很熟悉javascript,用jquery实现后,发现下面设置左右表行高的代码如果不把行保存在$tr1,$tr2中再设置css,速度非常慢,300行50列左右的数据得 ...
- entity framework 6 通用数据类
原文 http://blog.csdn.net/laokaizzz/article/details/25730813 public class BaseDAL { string strConn = ...
- python之第一个例子hello world
python用缩进(四个空格,不是teble)来区分代码块 1. coding=utf-8 字符编码,支持汉字 #!/usr/bin/env python# coding=utf-8print ...
- underscoreJS的Collections 的API
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- java设计模式--行为型模式--备忘录模式
备忘录模式,我们平常所做的备忘录么.还得深深研究哦. 备忘录模式: 备忘录模式 概述 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状 ...
- 探索PHP+Nginx(一) 安装Linux操作系统
每次学习一种新的开发语言的时候,都要经历一个很纠结的过程,除非你运气很好或者准备工作充分,否则你在这个过程中总会耗费大量的时间和精力,当然你也会受益很多.而这个过程就是,开发环境的基础搭建,看似是装几 ...
- HTML5 Canvas Arc Tutorial
HTML5 Canvas Arc Tutorial HTML5 Canvas Arc Tutorial
- hdu 4751 Divide Groups(dfs染色 或 2-sat)
Problem Description This year is the 60th anniversary of NJUST, and to make the celebration more c ...
- C# Lazy<T>(转)
本文来自:http://www.cnblogs.com/zhangpengshou/archive/2012/12/10/2811765.html .NET Framework 4 在一次次跳票中终于 ...