`

使用带有返回状态的存储过程

阅读更多
您可以调用的 SQL Server 存储过程是一个返回状态或结果参数的存储过程。这通常用于指示存储过程执行成功还是失败。可以使用 Microsoft SQL Server 2005 JDBC Driver 提供的 SQLServerCallableStatement 类,调用此类存储过程并处理其返回的数据。

使用 JDBC 驱动程序调用这种存储过程时,必须结合 SQLServerConnection 类的 prepareCall 方法使用 call SQL 转义序列。返回状态参数的 call 转义序列的语法如下所示:

{[?=]call procedure-name[([parameter][,[parameter]]...)]}

注意:
有关 SQL 转义序列的详细信息,请参阅使用 SQL 转义序列。


构造 call 转义序列时,请使用 ?(问号)字符来指定返回状态参数。此字符充当要从该存储过程返回的参数值的占位符。要为返回状态参数指定值,必须在执行存储过程前使用 SQLServerCallableStatement 类的 registerOutParameter 方法指定参数的数据类型。

注意:
当 JDBC 驱动程序与 SQL Server 数据库一起使用时,registerOutParameter 方法中为返回状态参数指定的值将始终为整数,您可通过使用 java.sql.Types.INTEGER 数据类型进行指定。


此外,向 registerOutParameter 方法传递返回状态参数值时,不仅需要指定要使用的参数的数据类型,还必须指定参数在存储过程中的序数位置。对于返回状态参数,其序数位置始终为 1,这是因为它始终是调用存储过程时的第一个参数。尽管 SQLServerCallableStatement 类支持使用参数的名称来指示特定参数,但您只能对返回状态参数使用参数的序号位置编号。

作为实例,在 SQL Server 2005 AdventureWorks 示例数据库中创建以下存储过程:


1CREATE PROCEDURE CheckContactCity
2   (@cityName CHAR(50))
3AS
4BEGIN
5   IF ((SELECT COUNT(*)
6   FROM Person.Address
7   WHERE City = @cityName) > 1)
8   RETURN 1
9ELSE
10   RETURN 0
11END
该存储过程返回状态值 1 或 0,这取决于是否能在表 Person.Address 中找到 cityName 参数指定的城市。

在下面的实例中,将向此函数传递 AdventureWorks 示例数据库的打开连接,然后使用 execute 方法调用 CheckContactCity 存储过程:

1public static void executeStoredProcedure(Connection con) {
2   try {
3      CallableStatement cstmt = con.prepareCall("{? = call dbo.CheckContactCity(?)}");
4      cstmt.registerOutParameter(1, java.sql.Types.INTEGER);
5      cstmt.setString(2, "Atlanta");
6      cstmt.execute();
7      System.out.println("RETURN STATUS: " + cstmt.getInt(1));
8   }
9   cstmt.close();
10   catch (Exception e) {
11      e.printStackTrace();
12   }
13}
分享到:
评论

相关推荐

    实验八 存储过程的使用(学生).doc

    在实验中,学生需要学会如何创建带参数和返回状态值的存储过程。例如,创建一个存储过程来检索某个城市工作并且向某供应商发了订购单的职工号,需要传递城市和供应商号作为参数。 知识点六:统计存储过程 在实验中...

    Java调用SQL_Server的存储过程详解1

    Java调用SQL_Server的存储过程详解 1使用不带参数的存储过程 2使用带有输入参数的存储过程 3使用带有输出参数的存储过程 4 使用带有返回状态的存储过程 5 使用带有更新计数的存储过程

    java调用存储过程(含out参数)

    4. **设置IN参数**:如果存储过程有`IN`参数,使用`setXXX()`方法(这里的`XXX`根据参数类型选择,如`setString()`, `setInt()`等)设置参数值。这些参数通常是输入数据,对存储过程进行操作。 5. **设置OUT参数**...

    执行带回参动态SQL的带回参存储过程

    回参(Return Parameter)是存储过程返回给调用者的一个特殊参数,通常用来表示存储过程的执行状态或者一个计算结果。不同于输出参数,回参是通过`RETURN`语句来设置的,其值在存储过程的执行过程中只能设置一次。...

    SQLServer存储过程中事务的使用方法

    本篇将详细介绍如何在SQL Server存储过程中使用事务。 首先,事务有四个基本特性,即ACID(原子性、一致性、隔离性和持久性): 1. 原子性(Atomicity):事务中的所有操作要么全部完成,要么全部不完成,不会留下...

    sql server 2008 存储过程示例带游标

    存储过程是预编译的SQL语句集合,存储在数据库服务器上,可以接受输入参数并返回结果或状态信息。它们提高了代码的重用性和执行效率,同时提供了更强大的错误处理机制。在SQL Server 2008中,存储过程可以通过`...

    birt调用存储过程

    - **不带返回值的调用**:主要用于执行那些不返回数据,但可能改变数据库状态的存储过程。 4. **创建存储过程数据源/集** 在BIRT中,首先需要创建一个数据源,然后定义数据集来调用存储过程。数据集是BIRT中用于...

    sql中return的用法,在C#中调用带有return值的存储过程

    - **返回状态码**:你可以使用`return`来设置一个返回代码,这可以帮助调用者了解存储过程执行的成功与否。例如,`RETURN 0`表示成功,`RETURN -1`表示失败。 - **返回值**:存储过程可以有一个或多个输出参数,但...

    在BIRT(百灵报表)中使用存储过程创建数据源

    3. RETURN参数:返回一个整型状态值,用于表示存储过程的执行状态。 4. 游标:某些数据库允许返回游标引用,虽然JDBC不直接支持,但Oracle、PostgreSQL和DB2等支持。 5. 多数据集:返回包含多个结果集或游标的结构。...

    SQL存储过程

    用户存储过程可以完成以下功能:接受输入参数并返回多个输出值、包含若干T-SQL语句,用以完成特定的SQL Server操作,其中可以有对其他存储过程的调用、返回一个指示成功与否及失败原因的状态代码给调用它的过程。...

    Java实现调用MySQL存储过程详解

    注意,如果你的存储过程使用了用户定义的变量或会改变当前会话的状态,可能需要使用`DEFINER`或`Invoker Rights`来控制执行权限。在上述的`show procedure status`查询中,`Security_type`列显示为`DEFINER`,这意味...

    适用于大多数数据库存储过程的讲解-楼主自己总结

    知识点三:带有返回值的存储过程 存储过程可以有返回值,通常通过 `OUTPUT` 参数来实现。例如,创建一个名为 `getid` 的存储过程,它接受两个字符串类型的输入参数,并返回一个整型的 `output` 参数: ```sql ...

    访问ORACLE存储过程

    一、调用带有输入、输出参数的存储过程 1. 创建Oracle存储过程: ```sql CREATE OR REPLACE PROCEDURE GetRecords( name_out OUT VARCHAR2, age_in IN VARCHAR2 ) AS BEGIN SELECT NAME INTO name_out FROM test...

    C#调用带游标的oralce存储过程

    本示例主要讲解如何在C# Winform应用中调用带游标的Oracle存储过程,以及处理返回的输出参数。 首先,确保你的开发环境已经安装了Oracle的数据提供程序,如ODP.NET。这将允许C#与Oracle数据库进行交互。在NuGet包...

    oracle 存储过程

    - 对于带有OUT或IN OUT参数的存储过程,必须声明变量来接收结果。 4. **复合数据处理和CTE**: - 使用Common Table Expressions(CTE)可以在存储过程中创建临时结果集,简化复杂查询和多步骤处理。 - CTE允许在...

    存储过程使用大全

    2. **带有输入参数的存储过程** 示例中的 `oneinput` 存储过程接收一个输入参数 `@aaa`。`cmd.Parameters.Append` 用于添加参数,`CreateParameter` 函数定义了参数名称、数据类型(这里为 `adInteger`)和方向(`...

    SQL存储过程.

    在ASP.NET项目中使用存储过程主要有以下几个好处: - **安全性**:存储过程可以帮助限制对数据库的直接访问,从而增强安全性。 - **性能**:由于存储过程在服务器端执行且预编译,因此执行速度更快。 - **复用性**:...

    第14章 存储过程的创建与使用.ppt

    **创建带有参数的存储过程**则更为复杂,因为需要定义参数的数据类型、名称,并可设置默认值。这样做可以使得存储过程更具灵活性,能够适应不同的输入条件。 **调用存储过程**是使用其定义的名称。对于**不带参数的...

    Sybase存储过程的建立和使用

    例如,以下是一个带有输入参数的存储过程,用于根据ID查询特定记录: ```sql CREATE PROCEDURE sp_GetRecordById @id INT AS BEGIN SELECT * FROM TableName WHERE Id = @id; END ``` 调用时,我们将ID值作为...

Global site tag (gtag.js) - Google Analytics