1、简要说明
本文将介绍在工具包(pdc-common-tool)中如何调用数据库中的存储过程。存储过程是一种在数据库中存储的预编译的SQL语句集合。它可以执行数据库的特定操作,如查询、更新或删除数据。存储过程的主要优点包括减少网络流量、提高系统性能、增强安全性、可重用性以及自动完成预先设定的任务。
存储过程是SQL编程中的一个重要组成部分,它们提供了一种有效的方式来封装数据库逻辑,提高数据库操作的效率和安全性。通过使用存储过程,开发者可以减少网络流量,提高系统性能,并确保数据操作的一致性和安全性。
在当前的工具包中,我们兼容3个数据库:MySQL、Oracle、SQL Server。下面我们将围绕这3个数据库进行讲解。
2、实现原理
这里先明确一点,本文是以读者熟悉数据库存储过程编写为前提的。如果读者不懂如何在数据库中编写数据库存储过程,可以参考以下文章:
MySQL 数据库:https://dev.mysql.com/doc/refman/8.4/en/create-procedure.html
Oracle 数据库: https://www.jianshu.com/p/4499814ed9ec
SQL Server 数据库:https://create-procedure-transact-sql
2.1、首先,我们看看在数据库中,如何调用函数:
在日常开发中,存储过程主要有3种类型:无参过程、有参过程、返回结果集的过程。下面根据不同的数据库,我们分开说明数据库如何调用 存储过程。
2.1.1、MySQL 存储过程调用


2.1.2、Oracle 存储过程调用


2.1.3、SQL Server 存储过程调用


2.2、规则总结
通过上面的例子,我们已经可以看出,调用数据库存储过程的方式比较简单。它通过 call 或者 exec关键字来执行存储过程调用。存储过程调用,参数以英文逗号为分隔符。有些数据库,比如 SQL Server 参数区域前后无英文括号包裹;而有些数据库,比如 MySQL、Oracle 是有英文括号包裹的。对于这种类型的字符串规则,我设计了以下函数。
2.3、实现代码截图

3、调用举例
下面,我将演示如何通过工具包中的API,调用数据库存储过程。根据数据库的处理方式,API调用主要为4种情况:
(1)存储过程无参数,也无返回值。这种一般是理论上的情况。因为就算没有输入参数,一般为了获取执行结果,也会需要一个或者多个输出参数。
(2)存储过程有参数,通过参数返回值。
(3)存储过程有参数,通过 select 语句返回结果集。
(4)存储过程有参数,通过 游标 返回结果集。这种方式,一般是Oracle 数据库。因为,Oracle 没法通过 select 语句返回结果集,所以,要定义一个游标,以参数方式返回结果。
因为API调用过程大体一致,所以我们这里以SQL Server 数据库为例子。对于第(4)种情况,由于Oracle数据库中,没法办法通过 select 语句返回结果集。所以,需要以游标参数的方式,返回结果集。下面,我们对这些情况,每个单独举例。
3.1、存储过程无参数,也无返回值


3.2、存储过程有参数,通过参数返回值(对于输出参数,需要注册返回值的类型。通常使用 java.sql.Types 类中定义的常量值)
java.sql.Types 说明如下:

调用带返回值的存储过程,样例程序如下:


3.3、存储过程有参数,通过 select 语句返回结果集


3.4、存储过程有参数,通过 游标 返回结果集(这里演示的是Oracle数据库)


注意:对于需要将游标内容,转换为一个实体对象的用户,可以试试:DBStaticUtil 类的 loadEntityListBySimpleDBData 方法。
本文完结。