Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 编程 » 使用 SQL Anywhere 编程简介 » 在应用程序中使用 SQL

 

描述结果集

有些应用程序会构建无法完全在应用程序中指定的 SQL 语句。例如,在有些情况下,在应用程序准确知道要检索什么信息之前(比如当某一报告应用程序让用户选择要显示的列时),语句取决于来自用户的响应。

在这种情况下,应用程序需要用一种方法来检索关于结果集的性质及内容方面的信息。关于结果集性质的信息(被称为描述符)用于标识数据结构,包括希望返回的列的数量和类型。一旦应用程序确定了结果集的性质,检索内容的过程就简单了。

结果集元数据(关于数据的性质和内容的信息)通过描述符来操纵。获取和管理结果集元数据的过程称为描述

由于游标通常会产生结果集,所以描述符和游标会紧密链接,只不过有些接口隐藏了描述符的使用,用户看不到。通常,需要描述符的语句是返回结果集的 SELECT 语句或存储过程。

与基于游标的操作一起使用描述符的顺序如下所示:

  1. 分配描述符。此操作可以隐式进行,不过有些接口也允许显式分配。

  2. 准备语句。

  3. 描述语句。如果语句是存储过程调用或批处理,且结果集不是由过程定义中的结果子句定义的,那么描述应在打开游标之后发生。

  4. 为语句声明和打开游标(嵌入式 SQL)或执行该语句。

  5. 如果有必要,获取描述符并修改分配区域。此步骤通常隐式进行。

  6. 读取和处理语句结果。

  7. 释放描述符。

  8. 关闭游标。

  9. 删除语句。有些接口可以自动完成此步骤。

实现注意事项
  • 在嵌入式 SQL 中,SQLDA(SQL 描述符区域)结构将保存描述符信息。请参见SQL 描述符区域 (SQLDA)

  • 在 ODBC 中,使用 SQLAllocHandle 分配的描述符句柄提供了对描述符的字段的访问。您可以使用 SQLSetDescRec、SQLSetDescField、SQLGetDescRec 和 SQLGetDescField 对这些字段进行操作。

    或者,您还可以使用 SQLDescribeCol 和 SQLColAttributes 获取列信息。

  • 在 Open Client 中,您可以使用 ct_dynamic 来准备语句,使用 ct_describe 来描述语句的结果集。不过,您还可以使用 ct_command 来发送 SQL 语句而不必事先准备它,并使用 ct_results 逐个地处理返回的行。这是在 Open Client 应用程序开发中比较常见的操作方式。

  • 在 JDBC 中,java.sql.ResultSetMetaData 类提供了有关结果集的信息。

  • 您还可以使用向数据库服务器发送数据的描述符(例如,使用 INSERT 语句);然而,这与用于结果集的描述符是不同种类的描述符。

    有关 DESCRIBE 语句的输入和输出参数的详细信息,请参见DESCRIBE 语句 [ESQL]