JDBC回顾四CallableStatement进行存储过程的调用

2023-12-22 05:08

本文主要是介绍JDBC回顾四CallableStatement进行存储过程的调用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

存储过程在我们的数据库中使用是比较频繁的一种结构,他可以大大简化sql语句的书写。在java中,我们利用CallableStatement接口,进行存储过程的调用。

CallableStatement 接口:超级接口有PreparedStatement, Statement, Wrapper。

用于执行 SQL 存储过程的接口。JDBC API 提供了一个存储过程 SQL 转义语法,该语法允许对所有 RDBMS 使用标准方式调用存储过程。此转义语法有一个包含结果参数的形式和一个不包含结果参数的形式。如果使用结果参数,则必须将其注册为 OUT 参数。其他参数可用于输入、输出或同时用于二者。参数是根据编号按顺序引用的,第一个参数的编号是 1。

IN 参数值是使用继承自 PreparedStatement 的 set 方法设置的。在执行存储过程之前,必须注册所有 OUT 参数的类型;它们的值是在执行后通过此类提供的 get 方法获取的

CallableStatement 可以返回一个 ResultSet 对象或多个 ResultSet 对象。多个 ResultSet 对象是使用继承自 Statement 的操作处理的。

Types 类:定义用于标识一般 SQL 类型(称为 JDBC 类型)的常量的类。在其中有许多静态的变量标示。
此类永远是不可序列化的。

设定的存储过程代码:在dos模式下记得转换结束标志
mysql> create procedure p(-> in v_a int,in v_b int,out v_c int,inout v_d int)-> begin-> if(v_a > v_b) then-> select v_a into v_c;-> else-> select v_b into v_c;-> end if;-> select (v_d+1) into v_d;-> end; //
Query OK, 0 rows affected (0.08 sec)
// 求输入参数的最大值,在v_d上加1再赋值给v_d-----------------------------------------------------------------------public class JdbcCall {public static void main(String[] args){Connection conn =null;CallableStatement ctmt = null;  //注意此时为CallableStatementResultSet rs = null;try{Class.forName("com.mysql.jdbc.Driver"); //建立驱动conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/studemo","root","root");//建立连接ctmt = conn.prepareCall("Call p(?,?,?,?)");     //创建语句ctmt.setInt(1, 2);   //参数值的设置参数一表示占位符位置,参数二表示传递的值ctmt.setInt(2, 4);//ctmt.setInt(3, x); 3为输出不需要进行设置值ctmt.setInt(4, 6);   // 4 既为输入,又为输出 ctmt.registerOutParameter(3, Types.INTEGER);   ctmt.registerOutParameter(4, Types.INTEGER);// 每一个输出参数都要进行注册设置输出类型 参数一 占位符位置,参数二表示类型。Types也是java.sql下的一个类ctmt.execute();//执行语句   System.out.println(ctmt.getInt(3));  // 通过get方法进行获取System.out.println(ctmt.getInt(4));}catch(ClassNotFoundException e){e.printStackTrace();}catch(SQLException e){e.printStackTrace();}finally{try{if(rs!=null){rs.close();rs=null;}if(ctmt!=null){ctmt.close();ctmt=null;}if(conn!=null){conn.close();conn=null;}}catch(SQLException e){e.printStackTrace();                }}}  }

这篇关于JDBC回顾四CallableStatement进行存储过程的调用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/522705

相关文章

Java调用C++动态库超详细步骤讲解(附源码)

《Java调用C++动态库超详细步骤讲解(附源码)》C语言因其高效和接近硬件的特性,时常会被用在性能要求较高或者需要直接操作硬件的场合,:本文主要介绍Java调用C++动态库的相关资料,文中通过代... 目录一、直接调用C++库第一步:动态库生成(vs2017+qt5.12.10)第二步:Java调用C++

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面

Python使用自带的base64库进行base64编码和解码

《Python使用自带的base64库进行base64编码和解码》在Python中,处理数据的编码和解码是数据传输和存储中非常普遍的需求,其中,Base64是一种常用的编码方案,本文我将详细介绍如何使... 目录引言使用python的base64库进行编码和解码编码函数解码函数Base64编码的应用场景注意

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

Java进行文件格式校验的方案详解

《Java进行文件格式校验的方案详解》这篇文章主要为大家详细介绍了Java中进行文件格式校验的相关方案,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、背景异常现象原因排查用户的无心之过二、解决方案Magandroidic Number判断主流检测库对比Tika的使用区分zip

Java使用Curator进行ZooKeeper操作的详细教程

《Java使用Curator进行ZooKeeper操作的详细教程》ApacheCurator是一个基于ZooKeeper的Java客户端库,它极大地简化了使用ZooKeeper的开发工作,在分布式系统... 目录1、简述2、核心功能2.1 CuratorFramework2.2 Recipes3、示例实践3

java中使用POI生成Excel并导出过程

《java中使用POI生成Excel并导出过程》:本文主要介绍java中使用POI生成Excel并导出过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录需求说明及实现方式需求完成通用代码版本1版本2结果展示type参数为atype参数为b总结注:本文章中代码均为