探索对Informix JDBC驱动程序使用可调用语句的存储过程的执行
为了提高关系数据库应用程序的性能,通常会使用存储过程,存储过程只不过是用户定义的功能,其中包含存储在数据库中的一系列 SQL 语句。在本文中,我们将演示如何通过对 Informix JDBC 驱动程序使用可调用语句来访问存储过程。
JDBC CallableStatement 扩展了 PreparedStatement,并向发送请求,以执行用于复杂操作(比如返回值或使用输入和输出存储过程参数)的存储过程。
在关系应用程序中,与单个 SQL 语句相比,使用存储过程的主要优势在于查询计划(或执行计划)是在创建存储过程时生成的,并且需要对存储过程的每次执行重用相同的查询计划,这节省了服务器中的大量资源。创建存储过程之后,任何数据库客户端(如 JDBC 应用程序)都可以随意调用这些过程,无需制定新的执行计划。
使用存储过程的方式因数据库服务器而异。数据库管理系统 (DBMS),如 Informix 和 DB2®,使用不同的 SQL 语法来执行存储过程。当应用程序开发人员需要编写以多个 DBMS 为目标的代码时,这使得事情变得更加困难。可调用语句提供了一个在所有 DBMS 系统中使用相同的 SQL 语句的执行存储过程的方法。
为何使用存储过程?
假设我们有一个 JDBC 应用程序,该应用程序需要高效地一次又一次重复某个任务序列。我们可能希望使用 Java™ 方法,但我们希望进行多少次客户端/服务器通信来发送和接收数据呢?数据库服务器将为应用程序发送的每个 SQL 语句准备并生成一个查询计划,这将占用一些 CPU 时间。尽管考虑到了性能,但对一个 SQL 语句使用简单的 Java 方法可能不太好。
使用存储过程(它只是一次性任务)会怎么样呢?创建一个 SQL调用,并且您可以使用 CallableStatement 对象从 JDBC 应用程序中调用它,CallableStatement 对象充当了服务器上存储过程的调用方。大多数业务逻辑将位于存储过程上。这有助于简化客户端代码并会加快执行速度,因为在创建存储过程时就已经准备好了存储过程中包含的 SQL 语句,并对这些语句进行了优化。
在 JDBC 应用程序中调用存储过程
Informix JDBC 驱动程序提供了可用于执行存储过程的 Statement、PreparedStatement 和 CallableStatement 方法。使用哪种方法取决于存储过程的特性。例如,如果存储过程返回一个值,那么应该使用 JDBC Statement 对象。下表提供了哪个存储过程类型使用哪个方法的一些指南。
表 1. 显示基于各个存储过程类型要使用哪个 JDBC 方法的表
存储过程类型 | JDBC 方法 |
---|---|
存储过程不需要 IN 或 OUT 参数 | 使用 Statement 对象 |
存储过程具有 IN 参数 | 使用 PreparedStatement 对象 |
存储过程具有 IN 和 OUT 参数 | 使用 CallableStatement 对象 |
我们将提供一个在以下情况下使用 Informix JDBC 方法执行存储过程的示例:
- 使用没有参数的 Statement
- 使用具有输入参数的 PreparedStatement
- 使用具有输出参数的 CallableStatement
- CallableStatement 中的已命名参数
- 过载的存储过程
上面提到的每个主题将包含以下细节:
- 在 Informix JDBC 驱动程序过程中调用存储过程所使用的语法
- 数据库上的存储过程的架构
- 具有输出的 JDBC 驱动程序示例程序