java调用存储过程和函数
以对表test进行增,删,改,查进行说明:
1.新建表test
   create table TEST
    (
      TID        NUMBER not null,
      TNAME      VARCHAR2(32),
      TCODE      VARCHAR2(32),
      CREATEDATE DATE
   )
alter table TEST
  add constraint PK_TEST_ID primary key (TID)
2.数据库中存储过程的脚本:
create or replace package test_package is
  procedure test_add(pid number,pcode varchar2,pname varchar2,pcreatedate date);
  procedure test_update(pid number,pname varchar2);
  procedure getNameAndCodeById(pid number,pcode out varchar2,pname out varchar2);
  function getNameById(pid number) return varchar2;
end test_package;
create or replace package body test_package is
   /*
    向表中增加一条数据
  */
  procedure test_add(pid number,pcode varchar2,pname varchar2,pcreatedate date)is
  begin
    insert into test values(pid,pcode,pname,pcreatedate);
    commit;
  end;
  /*
    将表中tid为pid的数据的tname更新为pname
  */
  procedure test_update(pid number,pname varchar2)is
  begin
   update test set tname=pname where tid=pid;
   commit;
  end;
  /*
    根据ID查找对应的code和name
  */
  procedure getNameAndCodeById(pid number,pcode out varchar2,pname out varchar2)is
  begin
   select t.tcode,t.tname into pcode,pname from test t where t.tid=pid;
  end;
   /*
   根据ID查找对应的name
   */
  function getNameById(pid number) return varchar2 is
  returnValue varchar2(100) :='';
  begin
  select t.tname into returnValue from test t where t.tid=pid;
  return returnValue;
  end;
end test_package;
3.在java程序中调用存储过程
  A.通过存储过程向表中添加一条数据
  public void add() throws Exception
	{
		Connection con=new Condb().getConnection();
		String sql="{call test_package.test_add(?,?,?,?)}";
		// sql也可以写为 "begin test_package.test_add(?,?,?,?);end;"
CallableStatement stmt=con.prepareCall(sql);
		stmt.setInt(1, 1);
		stmt.setString(2, "test");
		stmt.setString(3, "test");
		//注意日期类型的处理
		stmt.setDate(4, new Date(new java.util.Date().getTime()));
stmt.execute();
		stmt.close();
		con.close();
	}
B.通过给定的tid更新这条数据的tname字段
    public void update() throws Exception
	{
		Connection con=new Condb().getConnection();
		String sql="{call test_package.test_update(?,?)}";
CallableStatement stmt=con.prepareCall(sql);
		stmt.setInt(1, 1);
		stmt.setString(2, "update");
		stmt.execute();
		stmt.close();
		con.close();
	}
C.调用存储过程根据给定的tid返回tcode和tname
public void getNameAndCodeById() throws Exception
	{
		String tcode="";
		String tname="";
		Connection con=new Condb().getConnection();
String sql="{call test_package.getNameAndCodeById(?,?,?)}";
		CallableStatement stmt=con.prepareCall(sql);
		stmt.setInt(1, 1);
		stmt.registerOutParameter(2, Types.VARCHAR);
		stmt.registerOutParameter(3, Types.VARCHAR);
stmt.execute();
		tname=stmt.getString(2);
		tcode=stmt.getString(3);		
		System.out.println("tname="+tname+",tcode="+tcode);
		stmt.close();
		con.close();
	}
D.通过调用函数根据给定的tid返回tname
  public void getNameById() throws Exception
	{	
		String tname="";
		Connection con=new Condb().getConnection();
		String sql="select test_package.getNameById(?) from dual";
CallableStatement stmt=con.prepareCall(sql);
		stmt.setInt(1, 1);
		ResultSet rs=stmt.executeQuery();
		while(rs.next())
		{
			tname=rs.getString(1);
		}
		System.out.println("name="+tname);
		stmt.close();
		con.close();
	}
java调用存储过程和函数的更多相关文章
- 【转】java调用存储过程和函数
		
一.概述 如果想要执行存储过程,我们应该使用 CallableStatement 接口. CallableStatement 接口继承自PreparedStatement 接口.所以CallableS ...
 - Java 调用存储过程、函数
		
一.Java调用存储Oracle存储过程 测试用表: --创建用户表 create table USERINFO ( username ) not null, password ) not null ...
 - JDBC第二篇--【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】
		
这是我JDBC的第一篇 http://blog.csdn.net/hon_3y/article/details/53535798 1.PreparedStatement对象 PreparedState ...
 - JDBC【PreparedStatment、批处理、处理二进制、自动主键、调用存储过程、函数】
		
1.PreparedStatement对象 PreparedStatement对象继承Statement对象,它比Statement对象更强大,使用起来更简单 Statement对象编译SQL语句时, ...
 - JDBC(13)—JDBC调用存储过程和函数
		
步骤: JDBC调用存储过程和函数 步骤: ①:通过Connection对象的prepareCall()方法创建一个CallableStatement对象的实例,在使用Connection对象的pre ...
 - 转:EF调用存储过程、函数
		
EF调用存储过程.函数 2014-04-02 09:12:20| 分类: ORM框架|举报|字号 订阅 一.ef4.1 codeFirst 修改表结构 增加字段等 EF code ...
 - clob字段的值插入和查询N种方法【包括java调用存储过程传入clob参数】
		
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import jav ...
 - MySQL学习笔记:调用存储过程或函数报1418错误
		
问题 MySQL开启bin-log后,调用存储过程或者函数以及触发器时,会出现错误号为1418的错误: ERROR 1418 (HY000): This function has none of DE ...
 - Oracle数据库基本操作 (五) —— 使用java调用存储过程
		
一.环境准备 登录Oracle数据库scott账号,利用emp进行操作. 1.创建 proc_getyearsal 存储过程 -- 获取指定员工年薪 create or replace procedu ...
 
随机推荐
- Amazon教程:刚买就降价!避免损失,申请PRICE MATCH(价格保护)的方法
			
Amazon的商品价格波动频繁,虽然老白通常都在价格较低的时机向大家推荐,但是经常有降了又降的情况,刚下的单还没到手就又降价了,这种滋味肯定不好受.Amazon客服明确告诉老白一周内降价都可以申请PR ...
 - Javascript函数(定义、传值、重载)
			
Javascript 函数的定义的方式有不止一种. 第一种方式: function fn1(){ alert(typeof fn1); alert(“fn1”); } 在调用的时候直接就可以fu1() ...
 - Java中创建操作文件和文件夹的工具类
			
Java中创建操作文件和文件夹的工具类 FileUtils.java import java.io.BufferedInputStream; import java.io.BufferedOutput ...
 - SPOJ 7758. Growing Strings AC自动机DP
			
Growing Strings 题目:给出n个字符串,问最多能够选出多少个串组成序列,并满足前一个字符串是后一个字符串的子串. 分析: AC自动机经典水题... 考虑每个节点结尾时,他能够选出最多的串 ...
 - 转:  Android 后台任务型App多进程架构演化
			
评注:android 后台分进程保活方式的实践 Android 后台任务型App多进程架构演化 字数1621 阅读2790 评论8 喜欢35 什么是后台任务型app 类似音乐.录音机,需要用户长时间在 ...
 - Linux 网卡设备驱动程序设计(3)
			
三.网络子系统深度分析 用户程序通过网络发送这个网络数据包 通过 SCI 协议无关接口 协议栈 < UDP的实现 会选择路由 < IP的实现 会建立这个邻居子系统,建立邻居信 ...
 - DOM 1
			
首先getAttribute setAttribute只能被元素节点对象调用.(属性节点和文本节点调用不了) 我们可以通过一下三种方式得到元素: document.getElementById(); ...
 - 关于arraylist.remove的一些小问题。
			
public static void main(String[] args) { // TODO Auto-generated method stub ArrayList<Integer> ...
 - Asp.Net-创建网站的快捷方式到桌面,开始菜单,收藏夹
			
/// <summary> /// 创建快捷方式 /// </summary> /// <param na ...
 - DNS map file in windows
			
Edit "C:\WINDOWS\system32\drivers\etc\hosts", add the IP to DNS name mapping.