`

java调用Oracle存储过程

    博客分类:
  • java
阅读更多

本文为学习笔记

 

Test.java:

 

package bing.oracleprocedure;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Types;
import oracle.jdbc.OracleTypes;

/**
 * 练习存储过程的调用
 * @author bing
 * @version 2011-07-09
 */
public class Test {
	public static void test(){
		System.out.println("=====Test.test=====");
		Connection conn = new Conn().getConnection(); // 获得数据连接对象
		CallableStatement cstmt = null;
		ResultSet rs = null;
		try{
			/*
			 -- 创建练习用的表t_test
			create table t_test(
			  t_id number(4) not null,
			  t_name varchar2(20),
			  t_msg varchar2(100)
			);
			alter table t_test add constraint pk_t_test primary key(t_id);
			-- 编写练习用的过程up_insert_test 
			-- 插入数据到表t_test
			create or replace procedure up_insert_test(v_id in number, v_name in varchar2, v_msg in varchar2)
			is
			begin
			  insert into t_test(t_id,t_name,t_msg) values(v_id,v_name,v_msg);
			end up_insert_test;
			/
			 */
			// 过程调用,无返回值
			cstmt = conn.prepareCall("call up_insert_test(?,?,?)");
			cstmt.setInt(1, 1);
			cstmt.setString(2, "bing");
			cstmt.setString(3, "super man");
			cstmt.execute();
			cstmt.setInt(1, 2);
			cstmt.setString(2, "admin");
			cstmt.setString(3, "a worker");
			cstmt.execute();
			cstmt.setInt(1, 3);
			cstmt.setString(2, "user");
			cstmt.setString(3, "a user");
			cstmt.execute();
			System.out.println("插入成功");
			
			/*
		 	-- 编写练习用的存储过程up_select_test_1 
			-- 输入id,输出name,查询t_test中是单条记录
			create or replace procedure up_select_test_1
			(v_id in number, v_name out varchar2)
			is
			begin
			  select t_name into v_name from t_test where t_id = v_id;
			end up_select_test_1;
			/
			 */
			// 过程调用,返回单条记录
			// oracle过程没有返回值,所有返回值都是通过out参数来替代的
			cstmt = conn.prepareCall("call up_select_test_1(?,?)");
			cstmt.setInt(1, 1);
			cstmt.registerOutParameter(2, Types.VARCHAR);// 注册out参数,注意序号对应过程的参数序号
			cstmt.execute();
			String name = cstmt.getString(2);// 获取out参数,注意序号对应过程的参数序号
			System.out.println("查询成功");
			System.out.println("name = " + name);
			
			/*
			-- 编写包upk_select_test,为存储过程up_select_test_2准备 --
			create or replace package upk_select_test
			as type uc_test is ref cursor;
			end upk_select_test;
			/
			-- 编写存储过程up_select_test_2 
			-- 查询表t_test中的所有记录
			create or replace procedure up_select_test_2
			(uc_result out upk_select_test.uc_test)
			is
			begin
			  open uc_result for select * from t_test;
			end up_select_test_2;
			/
			 */
			// 过程调用,返回多条记录
			// 集合不能用一般的参数,必须要用pagkage,从上面的注释可以看到游标作为out参数,过程返回的是一个游标
			cstmt = conn.prepareCall("call up_select_test_2(?)");
			cstmt.registerOutParameter(1, OracleTypes.CURSOR);
			cstmt.execute();
			rs = (ResultSet) cstmt.getObject(1);
			System.out.println("查询成功");
			while(rs.next()){
				System.out.println("id = " + rs.getString(1) 
						+ "  name = " + rs.getString(2) 
						+ "  msg = " + rs.getString(3));
			}
			
			rs.close();
			cstmt.close();
			conn.close();
		}catch(Exception e){
			System.out.println("=====Test.test=====\n操作失败");
			e.printStackTrace();
		}
	}
	
	public static void main(String[] args) {
		new Test().test();
		/* 控制台输出:
		   =====Test.test=====
			插入成功
			查询成功
			name = bing
			查询成功
			id = 3  name = user  msg = a user
			id = 1  name = bing  msg = super man
			id = 2  name = admin  msg = a worker
		 */
	}
}

 

Conn.java:

package bing.oracleprocedure;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * 数据库连接类
 * @author bing
 * @version 2011-07-09
 *
 */
public class Conn {
	private static String DRIVER = "oracle.jdbc.driver.OracleDriver";
	private static String URL = "jdbc:oracle:thin:@127.0.0.1:1521:oracledbtest";
	private static String USER = "bing";
	private static String PASSWORD = "bing";
	private Connection conn = null;
	
	/**
	 * 获得连接对象
	 * @return 连接对象
	 */
	public Connection getConnection(){
		try{
			if(conn==null||conn.isClosed()){
					Class.forName(DRIVER);
					conn = DriverManager.getConnection(URL, USER, PASSWORD);
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		return conn;
	}
}

 

分享到:
评论

相关推荐

    java调用oracle存储过程返回结果集,Record,cursor参照.pdf

    Java调用Oracle存储过程返回结果集Record、Cursor参照 Java调用Oracle存储过程返回结果集(Record)是指在Java程序中通过调用Oracle存储过程来获取记录集的结果。下面将详细介绍相关知识点。 创建Type 在Oracle中...

    java调用oracle存储过程或者函数

    以上就是Java调用Oracle存储过程或函数的主要知识点,实践中要根据具体情况进行适当的调整和优化。在处理过程中,参考Oracle的JDBC文档和官方示例,以及Java API文档,将有助于理解和解决问题。

    Java调用oracle存储过程通过游标返回临时表

    本篇文章将深入探讨如何使用Java调用Oracle存储过程,并通过游标获取存储过程中返回的临时表数据。 首先,Oracle存储过程是一种在数据库端执行的预编译SQL语句和PL/SQL代码集合。它可以接收参数、执行业务逻辑并...

    用java调用oracle存储过程

    通过实例详细介绍了用java调用oracle存储过程的方法和步骤,包括无返回值的存储过程、有返回值的存储过程(非列表)和返回列表的存储过程的编写、JAVA调用,是一个对存储过程调用的一个全面总结,对程序开发具体实际...

    java调用oracle存储过程(游标)相关

    总之,Java调用Oracle存储过程,尤其是处理游标,需要理解JDBC的使用、Oracle特定的类型以及存储过程的参数传递方式。通过合理的编程实践,我们可以高效地在Java应用程序中集成Oracle数据库的复杂操作。

    java调用Oracle存储过程的代码

    总结,通过Java调用Oracle存储过程,我们需要配置JDBC驱动,建立数据库连接,创建CallableStatement,设置参数,执行存储过程,并处理返回的结果。在这个例子中,我们展示了如何调用一个简单的存储过程并打印返回的...

    java调用oracle存储过程实现增删改查

    在Java编程中,调用Oracle数据库的存储...总之,通过Java调用Oracle存储过程,我们可以有效地执行数据库操作,同时利用存储过程带来的性能和安全优势。了解如何正确设置参数、执行和处理结果是成功实现这一目标的关键。

    java调用oracle存储过程

    Java调用Oracle存储过程是数据库操作中常见的任务,特别是在需要执行复杂业务逻辑或者批量处理数据时。本篇文章将详细介绍如何通过Java与Oracle数据库交互,调用存储过程,并提供几个简单的实例帮助新手理解。 首先...

    JAVA调用ORACLE存储过程

    自己整理的,JAVA调用ORACLE存储过程 例子。

    java调用oracle存储过程.wps

    java调用oracle存储过程.wps java调用oracle存储过程.wps java调用oracle存储过程.wps

    java 调用oracle存储过程

    总之,Java调用Oracle存储过程涉及的主要知识点包括JDBC API、Oracle JDBC驱动、`CallableStatement`对象、参数绑定、结果集处理以及资源管理。通过学习和实践这些内容,开发者可以有效地在Java应用中集成Oracle...

    java调用oracle存储过程入门实例 增删改查

    在Java中调用Oracle存储过程,我们需要使用JDBC(Java Database Connectivity),这是Java标准库提供的一组接口和类,用于与各种数据库进行通信。首先,我们需要添加Oracle JDBC驱动到项目中,例如ojdbc.jar。 1. *...

    Java调用Oracle存储过程的方法

    本文将详细讲解如何使用Java调用Oracle存储过程,并提供示例代码。 首先,我们需要了解Java中用于与数据库交互的核心类,包括`java.sql.Connection`、`java.sql.CallableStatement`和`java.sql.Types`。`Connection...

    JAVA调用ORACLE存储过程游标使用

    总结一下,Java调用Oracle存储过程并处理游标的关键步骤包括: 1. 创建Oracle存储过程,包含一个或多个OUT参数,这些参数为游标。 2. 在Java中,使用`CallableStatement`调用存储过程,注册OUT参数为`OracleTypes....

Global site tag (gtag.js) - Google Analytics