`

DB2 通用数据库 iSeries 版 SQL 调用层接口(ODBC)

    博客分类:
  • DB2
阅读更多

DB2 通用数据库 iSeries 版 SQL 调用层接口(ODBC)

 

SQLPrepare — 准备语句

 

用途

SQLPrepare() 使 SQL 语句与输入语句句柄相关联并将该语句发送至 DBMS 以进行准备。应用程序可以通过将该语句句柄传送给其它函数来引用这个准备好的语句。

如果已将语句句柄与 SELECT 语句配合使用,则在调用 SQLPrepare() 之前,必须调用 SQLFreeStmt() 来关闭游标。

语法

SQLRETURN SQLPrepare (SQLHSTMT       hstmt,
                      SQLCHAR        *szSqlStr,
                      SQLINTEGER     cbSqlStr);

函数自变量 

表 129. SQLPrepare 自变量

数据类型自变量使用描述
SQLHSTMT hstmt 输入 语句句柄。一定不能有打开的游标与 hstmt 相关联。
SQLCHAR * szSqlStr 输入 SQL 语句字符串
SQLINTEGER cbSqlStr 输入 szSqlStr 自变量的内容的长度。

必须将此长度设置为 szSqlstr 中的 SQL 语句的精确长度,或者,如果语句文本以空终止,则设置为 SQL_NTS。

用法

在使用 SQLPrepare() 准备语句之后,应用程序可通过调用下列函数来请求关于结果集的格式的信息(如果该语句是 SELECT 语句的话):

  • SQLNumResultCols()
  • SQLDescribeCol()
  • SQLColAttributes()

可通过调用 SQLExecute() 来将准备好的语句执行一次或多次。在将该语句句柄与另一个SQLPrepare()SQLExecDirect()SQLColumns()SQLSpecialColumns()SQLStatistics() 或 SQLTables() 配合使用之前,该 SQL 语句将保持与该句柄相关联。

SQL 语句字符串可包含参数标记。参数标记由“?”字符表示,它用来指示语句中的一个位置,在调用 SQLExecute() 时,将在该位置替代应用程序变量的值。SQLBindParam() 用来将应用程序变量绑定到每个参数标记(使应用程序变量与参数标记相关联),以及指示在传送数据时是否应该执行任何数据转换。

SQL 语句不能是 COMMIT 或 ROLLBACK。必须通过调用 SQLTransact() 来发出 COMMIT 或 ROLLBACK。

如果 SQL 语句是定位型 DELETE 或定位型 UPDATE,则必须在同一个连接句柄下的单独语句句柄上定义该语句所引用的游标。

返回码

  • SQL_SUCCESS
  • SQL_SUCCESS_WITH_INFO
  • SQL_ERROR
  • SQL_INVALID_HANDLE

诊断 

表 130. SQLPrepare SQLSTATE

SQLSTATE描述说明
24000 游标状态无效 在指定的 hstmt 上存在打开的游标。
37xxx 语法错误或访问违例 szSqlStr 包含下列其中一项或多项:
  • COMMIT
  • ROLLBACK
  • 所连接的数据库服务器未能准备的 SQL 语句
  • 包含语法错误的语句
HY001 内存分配失败 驱动程序无法分配支持此函数的执行或完成所必需的内存。
HY009 自变量值无效 szSqlStr 是空指针。

 

自变量 cbSqlStr 小于 1,但不等于 SQL_NTS。

HY013 * 内存管理问题 驱动程序无法访问支持此函数的执行或完成所必需的内存。
注意:
并非所有 DBMS 在进行准备时都报告上述所有诊断消息。因此,应用程序在调用 SQLExecute() 时还必须能够处理这些情况。

示例

有关以下示例中使用的 check_error、initialize 和 terminate 函数的列表,请参考示例:交互式 SQL 和等价的 DB2 UDB CLI 函数调用

/*************************************************************************
** file = prepare.c
**
** Example of preparing then repeatedly executing an SQL statement.
**
** Functions used:
**
**        SQLAllocConnect      SQLFreeConnect
**        SQLAllocEnv          SQLFreeEnv
**        SQLAllocStmt         SQLFreeStmt
**        SQLConnect           SQLDisconnect
**
**        SQLBindCol           SQLFetch
**        SQLTransact          SQLError
**        SQLPrepare           SQLSetParam
**        SQLExecute
**************************************************************************/
 
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include "sqlcli.h"
 
#define MAX_STMT_LEN 255
 
int initialize(SQLHENV *henv,
               SQLHDBC *hdbc);
 
int terminate(SQLHENV henv,
              SQLHDBC hdbc);
 
int print_error (SQLHENV    henv,
                 SQLHDBC    hdbc,
                 SQLHSTMT   hstmt);
 
int check_error (SQLHENV    henv,
                 SQLHDBC    hdbc,
                 SQLHSTMT   hstmt,
                 SQLRETURN  rc);
 
/*******************************************************************
** main
** - initialize
** - terminate
*******************************************************************/
int main()
{
    SQLHENV     henv;
    SQLHDBC     hdbc;
    SQLCHAR     sqlstmt[MAX_STMT_LEN + 1]="";
    SQLRETURN   rc;
 
    rc = initialize(&henv, &hdbc);
    if (rc == SQL_ERROR) return(terminate(henv, hdbc));
 
    {SQLHSTMT   hstmt;
     SQLCHAR    sqlstmt[]="SELECT deptname, location from org where division = ?";
     SQLCHAR    deptname[15],
                location[14],
                division[11];
 
     SQLINTEGER rlength,
                plength;
 
        rc = SQLAllocStmt(hdbc, &hstmt);
        if (rc != SQL_SUCCESS )
            check_error (henv, hdbc, SQL_NULL_HSTMT, rc);
 
        /* prepare statement for multiple use */
        rc = SQLPrepare(hstmt, sqlstmt, SQL_NTS);
        if (rc != SQL_SUCCESS )
            check_error (henv, hdbc, hstmt, rc);
 
        /* bind division to parameter marker in sqlstmt */
        rc = SQLSetParam(hstmt, 1, SQL_CHAR, SQL_CHAR, 10, 10, division,
                     &plength);
        if (rc != SQL_SUCCESS )
            check_error (henv, hdbc, hstmt, rc);
 
        /* bind deptname to first column in the result set */
        rc = SQLBindCol(hstmt, 1, SQL_CHAR, (SQLPOINTER) deptname, 15,
                        &rlength);
        if (rc != SQL_SUCCESS )
            check_error (henv, hdbc, hstmt, rc);
        rc = SQLBindCol(hstmt, 2, SQL_CHAR, (SQLPOINTER) location, 14,
                         &rlength);
        if (rc != SQL_SUCCESS )
            check_error (henv, hdbc, hstmt, rc);
 
        printf("\nEnter Division Name or 'q' to quit:\n");
        printf("(Eastern, Western, Midwest, Corporate)\n");
        gets(division);
        plength = SQL_NTS;
 
        while(division[0] != 'q')
        {
            rc = SQLExecute(hstmt);
            if (rc != SQL_SUCCESS )
                check_error (henv, hdbc, hstmt, rc);
 
            printf("Departments in %s Division:\n", division);
            printf("DEPTNAME       Location\n");
            printf("-------------- -------------\n");
 
            while ((rc = SQLFetch(hstmt)) == SQL_SUCCESS)
            {
                printf("%-14.14s %-13.13s \n", deptname, location);
            }
            if (rc != SQL_NO_DATA_FOUND )
                check_error (henv, hdbc, hstmt, rc);
            SQLFreeStmt(hstmt, SQL_CLOSE);
            printf("\nEnter Division Name or 'q' to quit:\n");
            printf("(Eastern, Western, Midwest, Corporate)\n");
            gets(division);
        }
    }
 
    rc = SQLTransact(henv, hdbc, SQL_ROLLBACK);
    if (rc != SQL_SUCCESS )
        check_error (henv, hdbc, SQL_NULL_HSTMT, rc);
 
    terminate(henv, hdbc);
    return (0);
}/* end main */

参考

 

 


页的顶部 | 上一页 | 下一页 | 目录 | 索引 ]

分享到:
评论

相关推荐

    DB2 Universal Database for iSeries SQL Reference V5R3

    通过以上介绍可以看出,《DB2 Universal Database for iSeries SQL Reference V5R3》不仅涵盖了DB2 UDB for iSeries SQL的基础概念和语法细节,还深入探讨了如何利用这些功能来构建高效、安全的关系型数据库应用。...

    as400小型机db2数据库链接驱动

    通过该jar包可连接到远程as400上的db2数据库

    db2_Database_administration_for_iSeries

    根据给定文件的信息,我们可以提炼出关于“db2_Database_administration_for_iSeries”的一系列重要知识点,这主要涉及IBM i系列系统(原名AS/400)上的DB2数据库管理,具体版本为6 Release 1 (V6R1)。下面将详细...

    IBM.Data.DB2.iSeries.dll

    C#连DB2库文件IBM.Data.DB2.iSeries.dll

    DB2通用与DB2_AS400的JDBC包

    DB2通用与DB2_AS400的JDBC包是用于在Java应用程序中与IBM的DB2数据库系统交互的关键组件。这些JDBC(Java Database Connectivity)驱动程序允许开发者使用标准的SQL语句通过Java代码来执行数据库操作。在这个场景中...

    DB2 for IBM i: SQL Stored Procedures

    DB2 for IBM i平台上的SQL存储过程是用于封装逻辑、操作数据库并能够通过SQL接口调用的程序。它们不仅可以支持输入和输出参数,还能返回结果集,遵循iSeries的安全模型,增强数据的安全性,并且可以利用iSeries的...

    DB2英文版说明文档

    根据给定的文件信息,我们可以总结出以下关于DB2 Universal Database for iSeries中存储过程、触发器和用户自定义函数的重要知识点。 ### DB2 Universal Database for iSeries简介 #### 1.1 集成的关系数据库 DB2 ...

    Microsoft Excel用ODBC轻松获DB2数据

    ODBC是一种标准的应用程序编程接口(API),允许应用程序访问不同数据库系统,如DB2,而无需了解底层数据库系统的细节。 描述中提到的“AS/400上DB2数据”指的是运行在IBM iSeries (以前称为AS/400)服务器上的DB2...

    DB2_400数据库设计与编程

    DB2_400是IBM iSeries(以前称为AS/400)系统上的数据库管理系统,它是IBM DB2家族的一部分,特别针对IBM i操作系统优化。本主题将深入探讨DB2_400的数据库设计与编程,以帮助你理解如何在这一平台上创建、管理和...

    IBM iSeries Access for Windows

    虽然IBM i通常使用自己的DB2数据库系统,但iSeries Access也支持与其他数据库系统的集成,包括SQL Server。这意味着用户可以通过这个工具在Windows环境中远程查询、管理和维护SQL Server数据库。 IBM iSeries ...

    ibm DB2数据库教程

    DB2是IBM的旗舰级数据库产品,支持多种操作系统平台,包括Windows、Linux、Unix、Mac OS X以及IBM自身的z/OS和iSeries。DB2以高效、稳定和安全著称,广泛应用于金融、电信、零售等行业。 二、DB2安装与配置 安装DB2...

    AS400_DB2_SQL.rar_AS400 db2 sql mod_as400 db2 da_as400 sql_db2

    总的来说,AS400 DB2 SQL涉及的内容广泛且深入,包括SQL基础、高级特性、系统管理和开发接口等多个层面。这个压缩包对于AS400系统管理员、数据库开发者或者对AS400平台有兴趣的人来说,都是一个极好的学习和参考资料...

    数据库提示工具 sqlassist 6.5原版安装文件及其KEY

    数据库开发必备软件,全面支持常用数据库 Oracle 8i, 9i, 10g, 11g Microsoft SQL Server 2000, 2005, 2008, 2012, 2014 Windows SQL Azure 11 DB2 UDB 7.x, 8.x, 9.x, 10.x DB2 UDB for iSeries 5.x, 6.x, 7.x, 8.x...

    IBM DB2 SQL存储过程

    - **集成关系型数据库**:DB2 Universal Database (UDB) for iSeries 是一个集成的关系型数据库系统,专门为iSeries平台设计。 - **概述**:该系统提供了强大的数据库管理功能,包括支持多种数据类型、事务处理、...

    Sqlserver2000,2005,Oracle10g,Mysql,DB2,AS400数据库驱动

    本文将深入探讨标题中提及的几个主流数据库系统——SQL Server 2000与2005、Oracle 10g、MySQL、DB2以及AS400,以及如何使用Java进行数据库驱动加载和建立连接。 1. SQL Server 2000/2005: Microsoft SQL Server...

    AS400数据库快速入门

    AS400数据库快速入门是针对IBM的iSeries或System i平台上的数据库系统进行的一次基础知识的探索。AS400,现在被称为IBM i,是一个强大的企业级服务器,以其内置的数据库管理系统IBM DB2 for i而闻名。在这个快速入门...

    DB2错误信息提示

    根据给定文件的信息,我们可以深入探讨与DB2错误信息相关的几个关键知识点,这些知识点主要集中在DB2中的SQL错误代码(SQLCODE)、SQL状态(SQLSTATE)以及相关消息的处理上。 ### DB2 SQLCODE SQLCODE是DB2在执行SQL...

    db2 store procedure and triggers

    **DB2 存储过程与触发器** 是 IBM DB2 Universal Database(UDB)中的两个重要概念,它们对于构建高性能、高可靠性的数据库应用程序至关重要。 ##### 1. 存储过程(Stored Procedures) 存储过程是一种在数据库...

    DB数据库驱动(JDBC_Drivers_of_DB2)

    DB数据库驱动,特别是JDBC_Drivers_of_DB2,是连接Java应用程序与IBM DB2数据库的关键组件。JDBC,即Java Database Connectivity,是Java平台的标准接口,允许Java程序与各种类型的数据库进行通信。在本压缩包中,...

Global site tag (gtag.js) - Google Analytics