java调用存储过程(output和return)

java调用存储过程(含out参数) java调用存储过程的方法,含还有out参数的存储过程,解决方案,在网上找了n久发现这样的资源太少,现在总结一下我的解决方案供大家分享,希望对大家有用 立即下载

package callProcedure;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Types;

import oracle.jdbc.OracleTypes;

// 调用存储过程
public class CallProcedure {

public static Connection con = null;
// 调用存储过程,函数特有的封装类
public static CallableStatement callableStatement = null;
public static ResultSet rs = null;

public static void main(String args[]) throws SQLException {

   System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>调用存储过程<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
   // 调用无返回值的存储过程
   callNoReturnValueProcedure();
   // 调用带参数的存储过程
   callParamProcedure();
   // 调用只有一个返回值的存储过程
   callOnlyOneReturnValueProcedure();
   // 调用有一组返回值的存储过程
   callReturnValuesProcedure();
   System.out.println(">>>>>>>>>>>>>>>>>><<>>>>>>>>>>>调用函数<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
   // 调用有一个返回值的函数
   callReturnValueFunction();
}

////////////////////////////*******调用无返回值的存储过程*******/////////////////////////////
public static void callNoReturnValueProcedure() throws SQLException {
   try {
    con = getConnection();
    callableStatement = con.prepareCall("{call noReturnValueProcedure}");
    callableStatement.execute();
   } catch (SQLException sqlException) {
    sqlException.printStackTrace();
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    close();
   }
   System.out.println("callNoReturnValueProcedure()无返回值存储过程执行成功!");
}
/*
上面callNoReturnValueProcedure()调用的存储过程如下:
   create or replace procedure noReturnValueProcedure is -- 如果存储过程没有参数则不带括号,如果写成testProcedure()则报错
   begin
    insert into cht.remarke_info
    values
      ('001',
       '001',
       to_char(sysdate, 'yyyymmdd'),
       to_char(sysdate, 'yyyymm'),
       'cht',
       '发展的还可以。',
       sysdate,
       100);
   end noReturnValueProcedure;
*/

//////////////////////////////*******调用带参数的存储过程*******//////////////////////////////
public static void callParamProcedure() throws SQLException {
   try {
    con = getConnection();
//    // 写法一
//    callableStatement = con.prepareCall("{call paramProcedure('bonc-cht', 2001)}");
  
    // 写法二
    callableStatement = con.prepareCall("{call paramProcedure(?, ?)}");
    callableStatement.setString(1, "bonc-cht");
    callableStatement.setInt(2, 3001);
  
    callableStatement.execute();
   } catch (SQLException sqlException) {
    sqlException.printStackTrace();
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    close();
   }
   System.out.println("callParamProcedure()带参数存储过程执行成功!");
}
/*
上面callParamProcedure()调用的存储过程如下:
   create or replace procedure paramProcedure(userID varchar2, ramark_info_id number) is
    user_id varchar2(200); -- 定义字符串类型的内部变量要声明长度,否则报错(如:user_id varchar2报错),但是number类型的不用,如:v_id_no number;
   begin
    user_id := userID; -- 赋值操作,写成 userid = userID 也可以,一般都写成::=
    insert into cht.remarke_info
    values
      ('002',
       '002',
       to_char(sysdate, 'yyyymmdd'),
       to_char(sysdate, 'yyyymm'),
       user_id, -- 内部变量
       '发展的一般般。',
       sysdate,
       ramark_info_id); -- 所传参数变量
   end paramProcedure;
*/

/////////////////////////*******调用只有一个返回值的存储过程*******//////////////////////////
public static void callOnlyOneReturnValueProcedure() throws SQLException {
   try {
    con = getConnection();
    callableStatement = con.prepareCall("{call cht.onlyOneReturnValueProcedure(?, ?)}");
    callableStatement.setString(1, "fdasfdsa");
    // 设置返回值的类型2表示第二个参数
    callableStatement.registerOutParameter(2, Types.INTEGER);
    callableStatement.execute();
    // 获取返回值(一个)
    // 注意:callableStatement.getString(2)中的数值2并非任意的,而是和存储过程中的out列对应的,
    // 如果out是在第一个位置,那就是callableStatement.getString(1),
    // 如果是第三个位置,就是callableStatement.getString(3)。
    // 当然也可以同时有多个返回值,那就是再多加几个out参数了。
    int label_inst_id = callableStatement.getInt(2); // 注意:getInt(2)别写成了getInt("2")
    System.out.println("callOnlyOneReturnValueProcedure()只有一个返回值的存储过程的返回值(最大值):" + label_inst_id);
   } catch (SQLException sqlException) {
    sqlException.printStackTrace();
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    close();
   }
}
/*
上面callOnlyOneReturnValueProcedure()调用的存储过程如下:
   说明:存储过程只能通过output参数来返回结果,只要在存储过程已经给这个输出参数赋值了,它就能返回回去
     这种返回方式可以返回多个值,通过return返回值只是应用在函数function中
    create or replace procedure onlyOneReturnValueProcedure(user_ID in varchar2, max_label_inst_id out number) is
    begin
    select max(t.remarke_info_id)
       into max_label_inst_id  ---赋了值,能自动将该值返回
       from cht.remarke_info t
      where t.user_id = user_ID;
    end onlyOneReturnValueProcedure;
*/

///////////////////////////////*******调用有一组返回值的存储过程*******////////////////////////////
public static void callReturnValuesProcedure() throws SQLException {
   try {
    con = getConnection();
    callableStatement = con.prepareCall("{call getRemarke_info(?, ?)}");
    callableStatement.setString(1, "cht");
    // 预设输出结果的类型
    callableStatement.registerOutParameter(2, OracleTypes.CURSOR);
    callableStatement.execute();
    // 将结果转化成结果集
    rs = (ResultSet)callableStatement.getObject(2);
    int i = 0;
    while (rs.next()) {
     System.out.println(rs.getString(1) + "\t" +
       rs.getString(2) + "\t" +
       rs.getString(3) + "\t" +
       rs.getString(4) + "\t" +
       rs.getString(5) + "\t" +
       rs.getString(6) + "\t" +
       rs.getString(7) + "\t" +
       rs.getString(8));
     i ++;
    }
    System.out.println("调用有一组返回值的存储过程callReturnValuesProcedure()执行成功,有" + i + "条记录!");
   } catch (SQLException sqlException) {
    sqlException.printStackTrace();
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    close();
   }
}
/*
上面callReturnValuesProcedure()调用的包和存储过程(过程要返回一个结果集,要用到包和游标)如下:
   包:
    create or replace package myPackage as    ---as和is意思一样
     type cur is ref cursor; ---声明游标
     procedure getRemarke_info(userId in varchar2, outputValue out cur);   ---过程,函数等放在可以放在包里面,打包
    end myPackage;
   存储过程:
    create or replace procedure getRemarke_info(userId in varchar2, outputValue out myPackage.cur) is    ---as和is意思一样
    begin
     open outputValue for ---打开游标,存放结果
       select * from cht.remarke_info t where t.user_id = userId;
    end getRemarke_info;
*/

////////////////////////////*******调用有一个返回值的函数*******/////////////////////////////
public static void callReturnValueFunction() throws SQLException {
   try {
    con = getConnection();
    callableStatement = con.prepareCall("{? = call returnValuFunction(?)}"); // 如果函数无输入参数,则不要带括号如:returnValuFunction,带了反而报错,如:returnValuFunction()
    callableStatement.registerOutParameter(1, Types.VARCHAR);
    callableStatement.setString(2, "cht");
    callableStatement.execute();
  
    // 获取函数返回值getString(1)表示第一个问号(返回值)
    String output = callableStatement.getString(1);
    System.out.println("callReturnValueFunction()有一个返回值的函数执行成功!返回结果:" + output);
   } catch (SQLException sqlException) {
    sqlException.printStackTrace();
   } catch (Exception e) {
    e.printStackTrace();
   } finally {
    close();
   }
}
/*
上面callReturnValueFunction()调用的函数如下:
   create or replace function returnValuFunction(param varchar2) return varchar2 is ---return varchar2(varchar, number...);如果函数无输入参数,则不要带括号如:returnValuFunction,带了反而报错,如:returnValuFunction()
    return_value varchar2(20);   --- 内部字符串变量必须声明长度
   begin
    select count(*)
      into return_value
    from
      cht.remarke_info t
    where t.user_id = param;
    return return_value;
   end returnValuFunction;
*/


////////////////////////////////*******数据库操作的相关方法*******//////////////////////////////
// 建立数据库连接
public static Connection getConnection() {

   // 本工程所引的jar包
   String driver = "oracle.jdbc.driver.OracleDriver";
   // 注意thin:别少了:
   String url = "jdbc:oracle:thin:@133.64.140.45:1521:orcl";
   String userName = "cht";
   String password = "cht";

   Connection con = null;
   try {
    Class.forName(driver);
    con = DriverManager.getConnection(url, userName, password);
   } catch (SQLException sqlException) {
    sqlException.printStackTrace();
   } catch (Exception e) {
    e.printStackTrace();
   }
   return con;
}

// 关闭数据库操作
public static void close() {
   try {
    if (rs != null) {
     rs.close();
    }
    if (callableStatement != null) {
     callableStatement.close();
    }
    if (con != null) {
     con.close();
    }
   } catch (SQLException e) {
    e.printStackTrace();
   } catch (Exception e1) {
    e1.printStackTrace();
   }
}
}

/*
本文件中所用表的表结构如下:

CREATE TABLE "CHT"."REMARKE_INFO"
   ( "LABEL_INST_ID" VARCHAR2(200),
"DATE_TYPE" VARCHAR2(5),
"DAY_ID" VARCHAR2(8),
"MONTH_ID" VARCHAR2(6),
"USER_ID" VARCHAR2(20),
"REMARKE_CONTENT" VARCHAR2(500),
"REMARKE_DATE" DATE,
"REMARKE_INFO_ID" NUMBER
   )

*/

Kriging克里金模型实现数据回归预测Matlab代码 阅读详情

相关推荐

MacOS上VScode配置PlatformIO Core的疑难杂症与提速实战

本文详细解析了在MacOS上使用VScode配置PlatformIO Core时遇到的安装卡死、新建项目缓慢等常见问题,并提供了官方脚本安装、网络优化、命令行预下载等实用解决方案。通过环境变量配置和镜像源加速,大幅提升开发效率,特别适合ESP32等嵌入式开发场景。

weixin_42567046的博客 221

存储过程中的out,output,return 的使用

output 类型的参数需要在存储过程的参数列表中添加。output类型的参数传入存储过程后还会返回其运行后的值。 return value类型的参数不需要在存储过程的参数列表中添加。return value类型的参数就是存储过程最后return的值。 数据库中使用output值和return值: ---------------------------------------

1万+

spring-ai学习(四)-MCP

创建一个springai项目1.依赖。

zql1455890112的博客 1386

mysql output参数_JAVA程序调用MYSQL带有OUTPUT参数的存储过程

JAVA程序调用MYSQL带有OUTPUT参数的存储过程实现思路(1) 给存储过程参数列表中定义带OUTPUT 输出参数 ,关键字(参数名称 ,数据类型,OUTPUT)例如 :ps_isa_ywxx_insert(IN ps_ywbh VARCHAR(10) CHARACTER SET UTF8, IN ps_ywmc VARCHAR(20) CHARACTER SET UTF8, IN ps_...

weixin_29061425的博客 325

高速电路的信号完整性分析

摘要:介绍了高速PCB设计中的信号完整性概念以及破坏信号完整性的原因,从理论和计算的层面上分析了高速电路设计中反射和串扰的形成原因,并介绍了IBIS仿真。 关键词:信号完整性 反射 串扰 IBIS仿真 随着半导体技术和深压微米工艺的不断发展,IC的开关速度目前已经从几十MHz增加到几百MHz,甚至达到几GHz。在高速PCB设计中,工程师经常会碰到误触发、阻尼振荡、过冲、欠冲、串...

bh_wang的专栏 1431

Google账号找回通用方法(尤其是知道账号密码仍无法登录和找回的)

Google账号找回通用方法【尤其是知道账号密码仍无法登录和找回的】普通找回注意:适用于常用谷歌账户的设备和网络情况下无法使用手机或辅助邮箱验证码进行密码找回特殊找回方法注意;适用于1.新的设备以及网络环境(包括由于非正常原因导致设备系统以及应用信息变更)2.没有开启辅助验证(手机/邮箱)3.知道账号密码但无法登录或找回。通过申诉进行找回 普通找回 注意:适用于 常用谷歌账户的设备和网络情况下 无法使用手机或辅助邮箱验证码进行密码找回 通过恢复页面进行恢复 https://accounts.google

极客代码-极致生活 23万+

java outputstream用法_java中outputstream文件输出流的用法

outputstream是java中的字节输出流,它能用来将文件或者字符串输出到新的文件中,其使用方法是:首先使用File类打开一个文件;然后通过流的子类来指定位置;接着进行输入或输出操作;最后关闭“输入/输出”即可。流是用来读写传输数据的,输入和输出是对程序本身而言的,但程序需要读入数据用读入流,程序需要将数据输出保存起来用输出流。流相当于各种不同的管道来传输数据。按读入和输出分为输入流和输出流...

weixin_30367805的博客 3361

20 硬件工程师笔面试高频考点真题解析——寄存器

摘要: 寄存器是由多个边沿触发的D触发器组成的多位存储单元,用于同步时序电路中的数据暂存、隔离毛刺、跨时钟域同步等。选型需考虑位宽、触发方式(边沿/电平)、异步控制、电气参数等。核心时序参数包括建立时间(Tsu)、保持时间(Thold)和时钟输出延迟(Tco)。寄存器广泛应用于时序逻辑、流水线分割、毛刺消除、跨时钟域同步及计数分频等场景。同步复位依赖时钟边沿,时序易收敛但需时钟支持;异步复位独立于时钟,上电可靠但需注意亚稳态风险。

XU157303764的博客 1342

MyBatis调用带有返回结果、output参数的存储过程上与ibatis的区别

用过mybatis的应该都知道它是ibatis被Google收购后重新命名的一个工程,因此也做了大量升级。本文就来介绍下两者在调用存储过程上的一点区别,ibatis有一个专门的标签,在mybatis里面已经没有这标签了,而是通过一个参数statementType="CALLABLE"来区分。 存储过程: ALTER PROCEDURE [dbo].[Pro_Create_Number]

程序猿开发日志【学习永无止境】 5059

【CVPR2025 DEIM】超详细!手把手训练自己的数据集教学:从源码下载,配置虚拟环境,准备数据集、训练、验证、推理测试 ,实现0到1的完整教学过程。本文在win系统上训练,最强实时目标检测算法!

本文详细介绍了CVPR2025 DEIM目标检测模型的完整使用流程。内容包含:1)源码下载与虚拟环境配置;2)Visdrone2019数据集准备与配置文件修改;3)训练参数设置及Windows系统常见问题解决方案;4)模型验证、推理测试及热力图生成方法。特别针对Windows用户提供了虚拟环境配置指导,并详细说明了数据集路径设置、参数调整等关键步骤。通过本文的指导,小伙伴可以快速掌握DEIM模型的使用方法,用于学术论文研究和实验分析。

Ai缝合怪、助力小伙伴高效发论文 7655

Qt代码-软件商店

ui->statusBar->showMessage(QString("%1 已卸载").arg(app["name"].toString()));ui->statusBar->showMessage(QString("开始下载 %1...").arg(app["name"].toString()));QString("%1 已下载完成,是否立即安装?ui->statusBar->showMessage(QString("%1 下载完成").arg(app["name"].toString()));

寒寒豆豆软件公司的博客 112

存储过程的output及return的区别

存储过程的output及return的区别 sql取整 ceiling() RETURN 从查询或过程中无条件退出。RETURN 即时且完全,可在任何时候用于从过程、批处理或语句块中退出。不执行位于 RETURN 之后的语句。 返回的整型值。存储过程可以给调用过程或应用程序返回整型值 除非特别指明,所有系统存储过程返回 0 值表示成功,返回非零值则表示失败。 当用于存...

weixin_33701564的博客 397

学Simulink--环境感知场景实例:基于Simulink的毫米波雷达多目标跟踪仿真

本文介绍了基于Simulink的毫米波雷达多目标跟踪仿真系统,重点分析了FMCW雷达信号处理流程(Range/Doppler FFT、CFAR检测)和多目标跟踪算法(JPDA数据关联、EKF状态估计)。通过构建城市道路交叉场景,验证了系统在跟踪精度(位置误差<0.2m)、实时性(单帧处理24ms)和鲁棒性(ID切换率<5%)方面的性能优势,并提出了UKF滤波、多传感器融合等优化方向。该仿真系统为自动驾驶环境感知提供了实用的毫米波雷达跟踪解决方案。

amy_mhd的博客 92

MyBatis调用存储过程,含有返回结果集、return参数和output参数

Ibatis是我们经常使用的O/R映射框架,mybats是ibatis被Google收购后重新命名的一个工程,当然也做了大量的升级。而调用存储过程也是一次额C/S架构模式下经常使用的手段,我们知道,ibatis调用存储过程有一个专门的标签,在mybats里面已经没有这本标签了,而是通过一个参数statementType="CALLABLE"来区分。废话不多说,直接看怎么写吧! 测试环境:my

MarkArch的博客 864

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

编写一个存储过程 sqlserver专用 oracle稍有区别

USE [ceshi0827] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO    CREATE procedure sp_add_Student --存储过程名   @in_name varchar(100),  --传入参数   @out_name varchar(100) output  as

zhangweibin123的博客 336

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Oracle系列:(29)存储过程和存储函数

1、存储过程【procedure】什么是存储过程?事先运用oracle语法写好的一段具有业务功能的程序片段,长期保存在oracle服务器中,供oracle客户端(例如,sqlplus)和程序语言远程访问,类似于Java中的函数。为什么要用存储过程? (1)PLSQL每次执行都要整体运行一遍,才有结果 (2)PLSQL不能将其封装起来,长期保存在oracle服务器中...

weixin_34111819的博客 95

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

mysql 参数 output_JAVA程序调用MYSQL带有OUTPUT参数的存储过程

JAVA程序调用MYSQL带有OUTPUT参数的存储过程实现思路(1) 给存储过程参数列表中定义带OUTPUT 输出参数 ,关键字(参数名称 ,数据类型,OUTPUT)例如 :ps_isa_ywxx_insert(IN ps_ywbh VARCHAR(10) CHARACTER SET UTF8, IN ps_ywmc VARCHAR(20) CHARACTER SET UTF8, IN ps_...

weixin_39693193的博客 329

java中调用存储过程(sqlserver)

java中调用存储过程(sqlserver) sqlserver中定义存储过程,转账的例子 SELECT * FROM bank GO --创建存储过程 CREATE PROC myTRANSFER @inId int, @outId int, @money float, @inIdMoney float OUTPUT,--输出参数 @outIdMoney float OUTPUT...

一只苟延残喘的卑微蝼蚁 8467

JAVA程序调用MYSQL带有OUTPUT参数的存储过程

JAVA程序调用MYSQL带有OUTPUT参数的存储过程实现思路 (1) 给存储过程参数列表中定义带OUTPUT 输出参数 ,关键字(参数名称 ,数据类型,OUTPUT)    例如 :    ps_isa_ywxx_insert(IN ps_ywbh VARCHAR(10)  CHARACTER SET UTF8, IN ps_ywmc VARCHAR(20) CHARACTER SET

JenMinZhang的专栏 9118

java调用sql server存储过程_Java调用SQL Server存储过程

1、调用普通存储过程(1)创建存储过程CREATE Procedure [dbo].[GetContactListByName] /*根据联系人姓名获取联系人信息*/@Name nvarchar(50)Asbeginselect Contact.Id,Contact.Name,Phone,Email,QQ,GroupName from Contact,ContactGroupwhere Cont...

weixin_42499681的博客 2025

MyBatis调用存储过程,含有返回结果集、return参数和output参数 .

  use base_passport go   create proc yhj_test     @input_a int,     @input_b int,     @output_c int out as begin     select * from config.city;     set @output_c = @input_a*@input_b;     ...

u013934901的博客 851

Oracle 中调试、调用(带参数的)存储过程

㈠调试procedure:办法就是在程序中打印出变量的值.      1、sqlplus 上执行 “set serveroptput on”命令  2、在存储过程中可以用 DBMS_OUTPUT.PUT_LINE(VarName); 来打印出来  给个存储过程的例子:     create or replace procedure test is      Emp_name  VARCHAR2(10);     Cursor   c1 IS SELECT Ename FROM EMP WHERE Deptn

雪原虎的专栏 4579
上一篇: 获得用户请求的URL全路径
下一篇: java.lang.String.regionMatches方法使用
uohzoaix
博客等级 码龄17年 438粉丝 75原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值