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

相关文章

oracle 11g导入\导出(expdp impdp)之导入过程

《oracle11g导入导出(expdpimpdp)之导入过程》导出需使用SEC.DMP格式,无分号;建立expdir目录(E:/exp)并确保存在;导入在cmd下执行,需sys用户权限;若需修... 目录准备文件导入(impdp)1、建立directory2、导入语句 3、更改密码总结上一个环节,我们讲了

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

MyBatis-plus处理存储json数据过程

《MyBatis-plus处理存储json数据过程》文章介绍MyBatis-Plus3.4.21处理对象与集合的差异:对象可用内置Handler配合autoResultMap,集合需自定义处理器继承F... 目录1、如果是对象2、如果需要转换的是List集合总结对象和集合分两种情况处理,目前我用的MP的版本

Java Kafka消费者实现过程

《JavaKafka消费者实现过程》Kafka消费者通过KafkaConsumer类实现,核心机制包括偏移量管理、消费者组协调、批量拉取消息及多线程处理,手动提交offset确保数据可靠性,自动提交... 目录基础KafkaConsumer类分析关键代码与核心算法2.1 订阅与分区分配2.2 拉取消息2.3

Nginx中配置使用非默认80端口进行服务的完整指南

《Nginx中配置使用非默认80端口进行服务的完整指南》在实际生产环境中,我们经常需要将Nginx配置在其他端口上运行,本文将详细介绍如何在Nginx中配置使用非默认端口进行服务,希望对大家有所帮助... 目录一、为什么需要使用非默认端口二、配置Nginx使用非默认端口的基本方法2.1 修改listen指令

使用SpringBoot+InfluxDB实现高效数据存储与查询

《使用SpringBoot+InfluxDB实现高效数据存储与查询》InfluxDB是一个开源的时间序列数据库,特别适合处理带有时间戳的监控数据、指标数据等,下面详细介绍如何在SpringBoot项目... 目录1、项目介绍2、 InfluxDB 介绍3、Spring Boot 配置 InfluxDB4、I

AOP编程的基本概念与idea编辑器的配合体验过程

《AOP编程的基本概念与idea编辑器的配合体验过程》文章简要介绍了AOP基础概念,包括Before/Around通知、PointCut切入点、Advice通知体、JoinPoint连接点等,说明它们... 目录BeforeAroundAdvise — 通知PointCut — 切入点Acpect — 切面

C++ STL-string类底层实现过程

《C++STL-string类底层实现过程》本文实现了一个简易的string类,涵盖动态数组存储、深拷贝机制、迭代器支持、容量调整、字符串修改、运算符重载等功能,模拟标准string核心特性,重点强... 目录实现框架一、默认成员函数1.默认构造函数2.构造函数3.拷贝构造函数(重点)4.赋值运算符重载函数

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

MySQL按时间维度对亿级数据表进行平滑分表

《MySQL按时间维度对亿级数据表进行平滑分表》本文将以一个真实的4亿数据表分表案例为基础,详细介绍如何在不影响线上业务的情况下,完成按时间维度分表的完整过程,感兴趣的小伙伴可以了解一下... 目录引言一、为什么我们需要分表1.1 单表数据量过大的问题1.2 分表方案选型二、分表前的准备工作2.1 数据评估