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)语法详解 ...
随机推荐
- JDK,TomCat安装配置
JDK.Tomcat.myEclipse安装配置 准备安装包 JAVA运行环境包 JDK1.7下载地址: http://www.veryhuo.com/down/html/43205.html Jsp ...
- Array类型(二)
1.concat()方法可以基于当前数组中的所有项创建一个新数组. 先创建当前数组的一个副本,然后将接收到的参数添加到这个副本的末尾,最后返回新构建的数组. var colors = ["r ...
- ActionSupport.getText()方法 以及 js中:<s:text name="" />
下面略述com.opensymphony.xwork2.ActionSupport.getText()方法 public String getText(String aTextName) 说明:Get ...
- MySQL行级锁、表级锁、页级锁详细介绍
原文链接:http://www.jb51.net/article/50047.htm 页级:引擎 BDB.表级:引擎 MyISAM , 理解为锁住整个表,可以同时读,写不行行级:引擎 INNODB , ...
- python运维开发(十八)----Django(二)
内容目录 路由系统 模版 Ajax model数据库操作,ORM 路由系统 django中的路由系统和其他语言的框架有所不同,在django中每一个请求的url都要有一条路由映射,这样才能将请求交给对 ...
- 谈一谈JVM内存JAVA_OPTS参数
最近几个月,做的性能测试项目中,发现了一些内存方面的问题,其中有涉及到对JBOSS里的JAVA_OPTS配置,例如一下所示: JAVA_OPTS="-server -Xms1536m -Xm ...
- BZOJ NOI十连测 第一测 T2
思路:看到这题,就感觉是一道很熟悉的题目: http://www.cnblogs.com/qzqzgfy/p/5535821.html 只不过这题的K最多可以到N,而且边权不再只是1,考试的时候yy了 ...
- C 语言---漂亮的宏定义
写好C 语言,漂亮的宏定义很重要,使用宏定义可以防止出错,提高可移植性,可读性,方便性等等.下面列举一些成熟软件中常用得宏定义. 1.防止一个头文件被重复包含 #ifndef COMDEF_H #de ...
- HTML常用字符
显示结果 描述 实体名称 实体编号 空格 < 小于号 < < > 大于号 > > & 和号 & & " 引号 &quo ...
- WIN下和LINUX动态库的区别
**************************************************************************************************** ...