oracle java调用oracle11g几种不同类型的存储过程的方法,即没有返回值的过程、有返回值的过程、返回列表的过程、返回带分页的列表的过程

Java操纵Oracle 11g的技术! 目标: 掌握ODBC和JDBC两种数据库访问方式,理解他们的区别。            理解JDBC-ODBC桥的方式与JDBC两种数据库访问的方式的不同,以及如何访问oracle 11g 。 & 阅读详情

一.maven引入oracle11g驱动包依赖

  <dependency>
    <groupId>com.oracle</groupId>
    <artifactId>ojdbc6</artifactId>
    <version>11.2.0.3</version>
    <scope>runtime</scope>
  </dependency>

二.创建过程并使用java程序调用

package com.cz;

import java.io.Closeable;
import java.io.IOException;
import java.sql.*;


public class TestOra {
    String driverClass = "oracle.jdbc.driver.OracleDriver"; //oracle的驱动
    String url = "jdbc:oracle:thin:@localhost:1521:orcl";  //连接oracle路径方式 “”gfs“”是要建立连接的数据库名 1521端口
    String user = "scott";   //user是数据库的用户名
    String password = "123456";  //用户登录密码
    Connection conn = null;
    CallableStatement callableStatement = null;
    ResultSet resultSet = null;

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        TestOra testOra = new TestOra();
        //testOra.testNoOutPar(1001, "uo", 400);
        //testOra.testNoOutParUpdate(1001,800);
         //testOra.testOutPar(1001);
        //  testOra.testOutResultSet();
        testOra.testOutPage(3, 2);
    }

    public void testNoOutPar(int a, String b, int c) {
        try {
            //首先建立驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //驱动成功后进行连接
            conn = DriverManager.getConnection(url, user, password);
            callableStatement = conn.prepareCall("{ call scott.testa1(?,?,?) }");
            callableStatement.setInt(1, a);
            callableStatement.setString(2, b);
            callableStatement.setInt(3, c);
            callableStatement.execute();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {

            if (callableStatement != null) {
                try {
                    callableStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }

    }

    public void testNoOutParUpdate(int a, int c) {
        try {
            //首先建立驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //驱动成功后进行连接
            conn = DriverManager.getConnection(url, user, password);
            callableStatement = conn.prepareCall("{ call scott.testa2(?,?) }");
            callableStatement.setInt(1, a);
            callableStatement.setInt(2, c);
            callableStatement.execute();

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(resultSet, callableStatement, conn);
        }

    }

    public void testOutPar(int a) {
        try {
            //首先建立驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //驱动成功后进行连接
            conn = DriverManager.getConnection(url, user, password);
            callableStatement = conn.prepareCall("{ call scott.testa3(?,?,?) }");
            callableStatement.setInt(1, a);
            callableStatement.registerOutParameter(2, Types.VARCHAR);
            callableStatement.registerOutParameter(3, Types.INTEGER);
            callableStatement.execute();
            String name = callableStatement.getString(2);
            Integer sal = callableStatement.getInt(3);
            System.out.println("姓名:" + name + " 薪水:" + sal);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(resultSet, callableStatement, conn);
        }

    }

    public void testOutResultSet() {
        try {
            //首先建立驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //驱动成功后进行连接
            conn = DriverManager.getConnection(url, user, password);
            callableStatement = conn.prepareCall("{ call scott.testa4(?) }");
            callableStatement.registerOutParameter(1, -10);
            callableStatement.execute();
            resultSet = (ResultSet) callableStatement.getObject(1);
            while (resultSet.next()) {
                System.out.println("姓名:" + resultSet.getString(2) + " 薪水:" + resultSet.getInt(6));
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(resultSet, callableStatement, conn);
        }

    }

    public void testOutPage(int a, int b) {
        try {
            //首先建立驱动
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //驱动成功后进行连接
            conn = DriverManager.getConnection(url, user, password);
            callableStatement = conn.prepareCall("{ call scott.testa5(?,?,?) }");
            callableStatement.setInt(1, a);
            callableStatement.setInt(2, b);
            callableStatement.registerOutParameter(3, -10);
            callableStatement.execute();
            resultSet = (ResultSet) callableStatement.getObject(3);
            while (resultSet.next()) {
                System.out.println("姓名:" + resultSet.getString(2) + " 薪水:" + resultSet.getInt(6));
            }

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(resultSet, callableStatement, conn);
        }

    }

    public void close(AutoCloseable... closeables) {
        if (closeables != null) {
            for (AutoCloseable closeable : closeables) {
                try {
                    if (closeable != null)
                        closeable.close();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

(1)testNoOutPar方法对应 没有返回值的过程
create or replace procedure testa1(p1 in int ,p2 in varchar2,p3 in  int)
	is
	begin 
	insert into scott.emp (EMPNO,ENAME,SAL)values(p1,p2,p3);
	commit;
	end;
(2)testNoOutParUpdate方法对应 没有返回值的过程
create or replace procedure testa2(p1 in int ,p3 in  int)
	is
	begin 
	update  scott.emp  set SAL=p3 where EMPNO=p1;
	commit;
	end;
(3)testOutPar方法对应 有返回值的过程

callableStatement.registerOutParameter(索引列,类型) 用于定义存储过程中的输出类型
在这里插入图片描述

create or replace procedure testa3(p1 in int ,p2 out  varchar2,p3 out  int)
	is
	begin 
	select ENAME,SAL into p2,p3 from   scott.emp  where EMPNO=p1;
	end;

在这里插入图片描述

(4)testOutResultSet方法对应 返回列表的过程

注: callableStatement.registerOutParameter(1, -10);
在代码中 -10 代表 REF CURSOR

create or replace package  testpack
	is 
	type test_cursor is ref cursor;
	end testpack;
	/
create or replace procedure testa4(p_cursor out testpack.test_cursor  )
	is
	begin 
	open p_cursor  for select * from emp;
	end;

在这里插入图片描述

(5)testOutPage方法对应 返回带分页的列表的过程
create or replace procedure testa5(ps int,cs int,p_cursor out testpack.test_cursor  )
	is
	begin 
	open p_cursor  for select * from (select e.*,rownum rn from scott.emp e order by e.EMPNO) f where rn>ps*(cs-1) and rn<=ps*cs;
	end;

在这里插入图片描述

ORACLE存储过程调用Web Service 1概述 最近在ESB项目中,客户在各个系统之间的服务调用大多都是在oracle存储过程中进行的,本文就oracle存储过程调用web service来进行说明。其他主流数据库,比如mysql和sql service,调用web service的方法这里就不做介绍了,本文主要用来介绍oracle存储过程调用Web Service的方法。 众所周知,在Web Service通过HTTP协议发送请求 阅读详情

相关推荐

mybatis调用存储过程

记两一下工作中用到的mybatis调用存储过程,这边用到的mybatis是3.2.2版本,oracle 10g。 一、返回一个值的存储过程,如下: CREATE OR REPLACE PROCEDURE "SP_MF_I_IMP" ( I_MANIFEST_I_ID IN NUMBER , I_FUNCTION_CODE IN VARCHAR

一只成长的程序猿..... 1万+

Java访问Oracle11g中的存储过程

在这个示例中,首先我们使用JDBC连接到Oracle数据库,然后准备调用存储过程。我们通过CallableStatement对象来调用存储过程,并设置输入参数和注册输出参数。最后执行存储过程,并获取输出参数的值。访问Oracle11g中的存储过程可以通过JDBC来实现。下面给出一个简单的示例代码来访问Oracle11g中的存储过程。示例的输出结果将会是存储过程返回的员工姓名,比如"Employee name: John Smith"。

qq_46645079的博客 554

oracle11g JDBC驱动jar包+java测试案例

oracle11g JDBC驱动jar包+java连接oracle测试案例。连接 执行,关闭函数

【亲测】Java调用Oracle存储过程和存储函数

Java连接Oracle数据库存储过程和存储函数

欢迎你的到来,我们一起加油!!! 3676

一种高超声速飞行器弹道的仿真方法

设计并实现了一个高超声速飞行器弹道仿真算法,并应用到基于OSGEarth的态势中。

eyepeak的博客 6541

WSL2双显卡配置实战:避开Tesla与TCC模式的那些坑

本文针对WSL2环境下无法识别Tesla计算卡的问题进行深度解析。核心原因在于WSL2目前仅支持WDDM模式的显卡,而Tesla系列及运行在TCC模式下的显卡因采用纯计算架构而无法兼容。文章提供了详细的排查步骤,并给出了包括调整显卡用途、使用虚拟机或物理机在内的多种实用解决方案,帮助开发者避开配置陷阱。

weixin_29289821的博客 536

java如何调用oracle函数_Java调用oracle函数

package com.phome.dao;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.SQLException;import java.sql.Types;import com.phome.db.DBHerper;//Java调用oracle函数public class Function...

weixin_31487521的博客 794

【论文学习】《Fully-Convolutional Siamese Networks for Object Tracking》2016年SiamFC 全卷积孪生网络用于目标跟踪

在这项工作中,我们脱离了跟踪中采用的传统在线学习方法,并展示了一种专注于在离线阶段学习强嵌入的替代方法。与在分类设置中的使用不同,我们证明,对于跟踪应用,孪生全卷积深度网络能够更有效地使用可用数据。这不仅反映在测试时,通过执行有效的空间搜索,也反映在训练时,其中每个子窗口都有效地代表一个有用的样本,而几乎没有额外的成本。实验表明,深度嵌入为在线跟踪器提供了自然丰富的特征来源,并使简单的测试时策略表现良好。我们相信这种方法是对更复杂的在线跟踪方法的补充,并期望未来的工作能够更彻底地探索这种关系。

SkyLeopard的博客 2417

用java连接Oracle 11g

了解一下JDBC JDBC 是连接数据库的程序模块,由JSP应用程序,JDBC API,JDBC DriverManager(JDBC驱动管理器), JDBC驱动程序和数据库几部分组成。java应用程序通过JDBC API访问JDBC驱动管理器,JDBC驱动管理器载入相应的JDBC驱动程序,然后执行相应的数据库操作。 切入正题 首先下载连接数据库驱动的jar包(可去官网下载),或者在Oracl...

qq_45671431的博客 1081

YOLO26 正式发布源代码!极致速度优化方案, 面向工业级落地的目标检测模型!

YOLO26 作为 Ultralytics 公司于 2025 年 9 月发布的最新一代目标检测模型,在架构设计和技术实现上展现了显著的创新。本文深入分析了 YOLO26 的核心架构改进和技术原理,重点探讨了其在边界框回归、推理流程、损失函数设计和优化算法方面的突破性进展。

魔改工程师的博客 1243

星载SAR的各项指标解读(史上最全)

一、系统指标 系统指标主要指雷达系统的通用的指标,以及和卫星整星相关的指标,主要有一下几项: 工作频段: 雷达体制: 极化方式: 设计s

9268

Oracle存储过程的几种调用方式

记录:284 场景:Oracle存储过程调用方式,包括PL/SQL的SQL窗口中调用、在PL/SQL的命令窗口、在Procedures菜单列表中选中存储过程名称右键点击测试、在Package Bodies菜单列表中选中存储过程名称右键点击测试、在Jobs菜单列表选中已经配置Job的存储过程右键中点击运行、Java代码调用存储过程。.........

zhangbeizhen18的博客 2万+

EDKII环境配置完整版

参考博客【EDK2 UDK2018的环境搭建】:https://blog.youkuaiyun.com/qq_39155263/article/details/82965744下载EDK2 1.直接从https://github.com/tianocore/edk2/ 网站下载.zip压缩文件 2.运用svn 从http://svn.code.sf.net/p/edk2/code/trunk/edk2edk2下载 3.安装Visual Studio2017 安装其他Tool 1.IASL 从https..

tianpu2320959696的博客 1850

java和ibatis调用存储过程并取得返回值

http://blog.youkuaiyun.com/jiandanfeng2/article/details/6609623 由于存储过程的一系列好处,比如减少sql语句的网络传输等等。使得很多开发人员喜欢用存储过程,笔者也喜欢啊。下面分别介绍下java调用存储过程和ibatis调用存储过程并取得返回值,由于笔者最近开始接触ibatis,所以选了ibatis作为例子说明。       虽然存储过

it_taojingzhan的博客 8061

46、大数据助力SDN优化流量管理与控制器

本文探讨了大数据在软件定义网络(SDN)中的应用,重点分析了如何利用大数据技术优化SDN控制器的可扩展性和弹性。通过介绍SDN控制器的核心功能及其面临的挑战,提出了集中式、分布式、混合式和分层式控制器放置策略,并结合大数据分析系统架构与技术,详细阐述了在控制器放置优化、流聚合和备份路径识别等场景中的实际应用。文章还给出了大数据分析在SDN控制器优化中的操作流程与优势,展望了未来结合人工智能与物联网的发展方向,强调了数据安全与算法效率的重要性。

xx56789的博客 85

微信小程序 - 超详细小程序接入腾讯地图的完整流程,提供地图显示、IP 属地定位、地理位置名称、获取经纬度等超多功能示例(可一键复制并运行的功能源代码,详细的注释及常见问题汇总)小白直接上手!

微信小程序腾讯地图怎么接入,小程序项目中使用腾讯地图sdk,小程序中使用腾讯地图,微信小程序集成腾讯地图功能,微信小程序通过ip获取其地址、经纬度、详细地址,小程序使用腾讯地图跨域解决方法,微信小程序引入腾讯地图详细教程,原生小程序引入腾讯地图,微信小程序如何植入腾讯地图,微信小程序腾讯地图配置及使用详细教程,小程序植入腾讯地图SDK,微信小程序项目怎么用腾讯地图,微信小程序IP属地定位,获取当前用户位置名称,微信小程序如何使用腾讯地图获取用户的定位位置,在小程序中使用腾讯地图,实现定位,距离计算,实时搜索

🏆 前端领域优质创作者 8802

java调用Oracle中有返回值的存储过程

java调用Oracle中有返回值的存储过程   1) 在编写存储过程时,输入参数用in(如果不写默认为in),输出参数用out -- 编写过程,要求输入雇员编号,返回雇员姓名。 create or replace procedure getNameByNo(no in number, name out varchar2) is begin select ename into n...

我也IT 462

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

java调用oracle存储过程返回值_java调用Oracle中有返回值的存储过程

java调用Oracle中有返回值的存储过程1)在编写存储过程时,输入参数用in(如果不写默认为in),输出参数用out-- 编写过程,要求输入雇员编号,返回雇员姓名。create or replace procedure getNameByNo(no in number, name out varchar2) isbeginselect ename into name from emp wher...

weixin_39886841的博客 381

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Spring JdbcTemplate 与原生 JDBC 调用 Oracle 存储过程/存储函数,Oracle Java 驱动下载

目录 前 言 调用无返回值的存储过程 调用单个返回值的存储过程 调用多个返回值的存储过程 前 言 1、关于 JdbcTemplate 的介绍、pom 依赖、DI 注入可以参考《Spring JdbcTemplate 模板剖析 之 常用 增删改查》,本文继续介绍 JdbcTemplate 调用数据库的存储过程,虽然 Mysql 也有存储过程,但是为了尽可能的多覆盖一点,本文选择调用 .........

蚩尤后裔-汪茂雄 7176

Java中调用数据库存储过程

本文介绍了Java通过JDBC调用数据库存储过程的方法。存储过程是预编译的SQL语句集,具有性能高、网络流量少、安全性好和可复用性强等优点。文章详细讲解了Java调用存储过程的9个基本步骤,包括获取连接、创建CallableStatement对象、参数设置与获取等,并提供了4种典型示例:无参数存储过程调用、IN参数传递、OUT参数获取以及INOUT参数处理。通过具体代码展示了如何执行查询型存储过程、处理输入输出参数等常见场景,为开发者实现数据库业务逻辑提供实用参考。

shangjg3的博客 1678

Java调用oracle存储过程入门

小例子:create or replace procedure text (v_lev in varchar2, out_grade out varchar2) IS v_kind varchar2(5); v_out varchar2(10); begin begin select kind into v_kind from a...

摩西人生 235

java调用oracle存储过程_java调用oracle存储过程详解

之前给大家介绍了java代码调用存储过程,下面要给大家介绍的就是java当中调用oracle存储过程,一起来看看吧。首先来看一下项目结构:在数据库创建存储过程的脚本,假如,使用的是本地的oracle数据库,那么,就需要开启服务-OracleOraDb11g_home1TNSListener和OracleServiceORCL。实现:输入用户的工号,输出用户名字、薪水以及工作:createorr...

weixin_33785828的博客 2719

oracle函数 isex,oracle之存储过程

oracle的版本为11g存储过程实际上是属于子过程的一种特例,用于执行特定的操作本文主要涉及到如下几个知识点:1.创建一个不带参数的存储过程以及调用2.创建一个带输入参数的存储过程以及调用3.创建一个带输入输出参数的存储过程以及用java代码进行调用4.创建一个带输入参数,输出返回一个结果集的存储过程以及用java代码调用在执行所有的操作之前,创建一个用户,并创建一个表空间以及分配角色,并创建一...

weixin_34528410的博客 947

oracle 存储过程调用java一

一、如何创建java存储过程?通常有三种方法来创建java存储过程。1. 使用oracle的sql语句来创建:e.g. 使用create or replace and compile java source named "" as       后边跟上java源程序。要求类的方法必须是public static的,才能用于存储过程。 SQL> create or replace a

thinker28754的专栏 9405

oracle数据库java存储过程,一篇文章告诉你JAVA语言对ORACLE数据库存储过程的调用...

本文主要向大家介绍了JAVA语言对ORACLE数据库存储过程的调用,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。一、任务提出JAVA操作oracle11g存储过程实验需要完成以下几个实例:1.调用没有返回参数的过程(插入记录、更新记录)2.有返回参数的过程3.返回列表的过程4.返回带分页的列表的过程。二、建立表和相应的存储过程create table student (sno i...

weixin_36301419的博客 444
上一篇: oracle 内置程序包,建立程序包的方法,程序包中使用游标,常用程序包
下一篇: oracle 临时表空间的作用和创建以及相关操作
但行益事莫问前程
但行益事莫问前程 新星创作者: 数据库技术领域 新星创作者: 数据库技术领域
博客等级 码龄7年 8490粉丝 225原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

但行益事莫问前程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值