`

DB2 UDB 连通性快捷表 第 4 部分

    博客分类:
  • DB2
阅读更多

http://www.chinaitpower.com/A200508/2005-08-08/186502.html

 

Raul F. Chong, 数据库顾问, IBM
Jalud Abdulmenan, 数据库顾问

2004 年 3 月

本文的焦点是使用 C 和 Java 语言讨论工作站上的 DB2 UDB 应用程序开发的连通性。

简介
这是第四篇讨论连通性应用场景的文章,其中包括 IBM® DB2® Universal Database TM(UDB)for Linux, UNIX® and Windows® version 8(fixpak 4)、DB2 UDB for iSeries TM 5.2(从 2003 年 12 月起为维护级别)以及 DB2 UDB for z/OS® V8(本文撰写之时,DB2 UDB for z/OS version 8 尚未广泛发布。用于测试场景的是 DB2 for OS/390、z/OS v7 以及从 2003 年 12 月起为维护级别的 V8 beta 版。)。与该系列的 第 3 部分一样,本文使用的也是最新版本;不过文中介绍的方法也可能适用于其他的版本。

本文的焦点是使用 C 和 Java 语言的工作站应用程序开发的连通性。我们将提供使用 JDBC TM、SQLJ、ODBC 等在工作站平台(Linux、UNIX 以及 Windows)上开发的示例程序,其中每个程序都将连接到 DB2 UDB 数据库(任何平台),查询 SYSIBM.SYSDUMMY1 表以及断开连接。请务必使用拥有访问该表的正确权限的用户 ID 来运行这些程序。这些程序是在 Service Pack 4 级别的 Microsoft® Windows 2000 平台上测试的,但是应该也可以移植到 UNIX 和 Linux 平台上。由于篇幅限制,我们所提供的每个示例程序的代码清单只带有最少的注释和错误检查(不过功能仍然齐全)。要获得完整的实用示例程序,请下载本文附带的文件。

该系列的第五篇文章中将介绍 ADO 和 ADO.NET,而第六篇文章中还将介绍其他语言。我们不会讨论在 z/OS、OS/390 或 iSeries 中本地编写的程序。请注意,我们假定您已经具备了一些编程的背景知识;因此,我们不会介绍编程技巧,以及一般是如何编码的。

作为顾问,我们经常将示例程序放在手边,用以测试应用程序连通性的设置是否正确。本文中的示例程序也可以用于此目的。在 DB2 UDB for Linux、UNIX 和 Windows V8 中,您现在可以使用配置助手(Configuration Assistant,CA)来测试多种类型的连接。不过,从 DB2 UDB 的先前版本中也可得到这些示例程序。根据所提供的源代码,示例程序还提供了关于连通性设置的更多详细信息。

本文对于 DBA 应该也是有用的,即使他们通常都无需给程序编码。因为在与应用程序开发人员交流时,对于如何编写要连接和访问 DB2 数据库的程序有基本的理解将很有益。

本文中的程序是基于为其提供了 DB2 UDB 应用程序开发客户机(DB2 UDB Application Development client)的示例程序(在目录 sqllib/samples 下)的;然而为了便于理解,已将它们简化了。

本文将描述下列连通性的应用场景:

C/C++:

  • 场景 1:使用 CLI 连接 DB2 UDB 数据库
  • 场景 2:使用 ODBC 连接 DB2 UDB 数据库
  • 场景 3:使用嵌入式 SQL 和宿主语言 C 连接 DB2 UDB 数据库

Java:

  • 场景 4:使用 SUN type 1 驱动程序(JDBC - ODBC 桥)连接 DB2 UDB 数据库
  • 场景 5:使用 IBM DB2 UDB type 2 驱动程序(App 驱动程序)连接 DB2 UDB 数据库
  • 场景 6:使用 IBM DB2 UDB type 2 驱动程序(通用驱动程序)连接 DB2 UDB 数据库
  • 场景 7:使用 IBM DB2 UDB type 3 驱动程序(网络驱动程序)连接 DB2 UDB 数据库
  • 场景 8:使用 IBM DB2 UDB type 4 驱动程序(通用驱动程序)连接 DB2 UDB 数据库
  • 场景 9:使用 SQLJ 连接 DB2 UDB 数据库

假定所使用的协议为 TCP/IP 协议,因为这是最常使用的协议。我们只列出基本的设置信息。

请注意,我们描述的场景为两层环境。对于 n层环境,则只要将“machine 1”作为执行 C 或 Java 程序的系统来考虑。

下面描述的所有场景中,均在测试机器中设置了下列 Windows 2000 环境变量。其中大多数环境变量是在安装 DB2 UDB 时自动设置的。请注意,对于部分示例程序,我们使用 MS Visual Studio V6 进行编译,这在某些环境变量的值中得到了反映。而在 UNIX/Linux 平台中,某些变量名稍微有点不同。请务必根据您自身的环境,适当地设置这些变量:

表 1. 必需的 Windows 2000 环境变量

环境变量
CLASSPATH .;C:\\PROGRA~1\\SQLLIB\\java\\db2java.zip;C:\\PROGRA~1\\SQLLIB\\java\\db2jcc.jar;C:\\PROGRA~1\\SQLLIB\\java\\sqlj.zip;C:\\PROGRA~1\\SQLLIB\\bin;C:\\PROGRA~1\\SQLLIB\\java\\common.jar;C:\\PROGRA~1\\SQLLIB\\java\\db2jcc_license_cisuz.jar;C:\\PROGRA~1\\SQLLIB\\java\\db2jcc_license_cu.jar;
INCLUDE C:\\PROGRA~1\\SQLLIB\\INCLUDE;C:\\PROGRA~1\\SQLLIB\\LIB
LIB C:\\WINNT\\system32;C:\\Program Files\\Microsoft Visual Studio\\VC98\\mfc\\lib;C:\\Program Files\\Microsoft Visual Studio\\VC98\\lib;C:\\PROGRA~1\\SQLLIB\\LIB
Path C:\\Program Files\\SQLLIB\\java\\jdk\\bin;C:\\PROGRA~1\\SQLLIB\\BIN;C:\\PROGRA~1\\SQLLIB\\FUNCTION;

场景 1 - 使用 CLI 连接 DB2 UDB 数据库(任何平台)
可通过下载(免费)任何一个 IBM DB2 UDB 客户机来获取 DB2 UDB CLI 驱动程序(还可用作 DB2 UDB ODBC 驱动程序)。

图 1. 从 DB2 UDB for Linux、UNIX 和 Windows CLI 应用程序客户机连接到 DB2 UDB 服务器(任何平台)
从 DB2 UDB for Linux、UNIX 和 Windows CLI 应用程序客户机连接到 DB2 UDB 服务器(任意平台)

清单 1. dbconn_ODBC_CLI.c(带有最少注释且不含错误检查)


            //********************************************************************
            // SOURCE FILE NAME: dbconn_ODBC_CLI.c
            //********************************************************************
            /* Standard C/C++ Headers */
            #include <stdio.h>
            #include <stdlib.h>
            #include <string.h>
            /* DB2 ODBC Header */
            #include <sqlcli1.h>
            /* Main Program
            */int main(int argc, char** argv)
            {
            /* Handles */
            SQLHENV  henv = SQL_NULL_HENV;
            SQLHDBC  hdbc = SQL_NULL_HDBC;
            SQLHSTMT hstmt= SQL_NULL_HSTMT;
            /* Local variables */
            SQLRETURN     rc;
            SQLCHAR       statement[32761];
            SQLCHAR       mycolout[2];
            SQLINTEGER    mycoloutlen = 0;
            char          dbname[8 + 1];
            char          user[18 + 1];
            char          pswd[30 + 1];
            if (argc < 4) {
            printf ("Usage: dbconn_ODBC_CLI <database name>
            <userid> <password>\\n");
            exit (0);
            }
            strcpy (dbname, argv[1]);
            strcpy (user,   argv[2]);
            strcpy (pswd,   argv[3]);
            rc = SQLAllocHandle(SQL_HANDLE_ENV,
            SQL_NULL_HANDLE,
            &henv);
            rc = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION,
            (SQLPOINTER)SQL_OV_ODBC3, SQL_IS_INTEGER);
            rc = SQLAllocHandle(SQL_HANDLE_DBC,
            henv,
            &
            hdbc);
            /* connect to the database */
            rc = SQLConnect(hdbc,
            (SQLCHAR *)dbname,
            SQL_NTS,
            (SQLCHAR *)user,
            SQL_NTS,
            (SQLCHAR *)pswd,
            SQL_NTS);
            printf ("\\n  Successful connection to '%s' db using
            ODBC/CLI \\n",dbname);
            rc = SQLAllocHandle(SQL_HANDLE_STMT,
            hdbc,
            &hstmt);
            strcpy(statement,"SELECT IBMREQD");
            strcat(statement,"  FROM SYSIBM.SYSDUMMY1;");
            rc = SQLExecDirect(hstmt,
            statement,
            SQL_NTS);
            rc = SQLBindCol(hstmt, 1,
            SQL_C_CHAR,
            mycolout,
            sizeof(mycolout),
            &mycoloutlen);
            while((rc = SQLFetch(hstmt)) == SQL_SUCCESS
            || rc == SQL_SUCCESS_WITH_INFO)
            {
            /* Print data */
            printf("  Successful retrieval of record.  Column
            'IBMREQD' has a value of '%s'\\n",mycolout);
            }
            rc = SQLCloseCursor(hstmt);
            rc = SQLFreeStmt(hstmt, SQL_RESET_PARAMS);
            rc = SQLFreeHandle(SQL_HANDLE_STMT, hstmt);
            rc = SQLDisconnect(hdbc);
            printf ("  Successful Disconnection from database '%s'\\n",
            dbname);
            rc = SQLFreeHandle(SQL_HANDLE_DBC, hdbc);
            rc = SQLFreeHandle(SQL_HANDLE_ENV, henv);
            printf ("  End of Program\\n");
            return 0;
            }  // dbconn_ODBC_CLI
            

表 2. 从 DB2 UDB for Linux、UNIX 和 Windows CLI 客户机应用程序连接到 DB2 UDB 服务器(任何平台)

Machine 1(‘myblue’)DB2 UDB for Linux、UNIX 和 Windows Machine 2(‘aries’)DB2 UDB 服务器(任何平台)
在这台机器上运行下列命令: 您需要从这台机器上获取下列信息,以便在 machine 1 上执行命令:
第一部分:配置连通性  
db2 catalog tcpip node mynode remote 9.23.190.24 server 50000
db2 catalog db sample at node mynode
db2 terminate
请参阅该系列文章的 第 1 部分以获得连通性设置的详细指导。
 
第二部分:编译并链接 CLI 程序  

在 Windows 中使用 MS Visual Studio 6:

  • cl -Zi -Od -c -W2 -DWIN32 dbconn_ODBC_CLI.c
  • link -debug -out:dbconn_ODBC_CLI.exe dbconn_ODBC_CLI.obj db2cli.lib db2api.lib

对于本文,我们将以上两个命令放置在名为‘bldappCLI.bat’的文件之中,而该文件是以程序名(不带扩展名)为参数的。

请注意,我们是使用与 odbc32.lib(ODBC 驱动程序管理器)相对的 db2cli.lib (CLI 驱动程序)来链接程序的。这意味着这是一个 CLI 程序,因而它不会通过 ODBC 驱动程序管理器;因此,该程序将仅仅对一个 DB2 UDB 数据库进行操作。

* 注意事项:

  • DB2 运行时客户机已经足够运行这个 CLI 程序了。但是,如果要像在本例中一样开发这个程序,由于需要对程序进行编译,那么您就需要 DB2 UDB 应用程序开发客户机(DB2 UDB Application Development client)。
  • 应确保已正确设置了环境变量(请参阅 表 1中的实例)。
 
第三部分:执行程序  
dbconn_ODBC_CLI sample db2admin mypsw
  • 该示例程序被设计为按此次序获取 3 个参数:<数据库名> <用户 ID> <密码>
  • ‘Sample’是此客户端机器上的 catalog db 命令中为数据库名指定的别名。默认情况下,如果没有在该命令中指定别名,那么数据库名就相当于别名。
sample = 数据库名

db2admin = 服务器上的用户 ID

mypsw = 服务器上的密码

图 2 显示了 DB2 UDB 命令‘list db directory’的输出,该命令是在用于开发程序的 Windows 系统中发出的。第一个条目‘NEW_JERS’表示一个 DB2 UDB for z/OS 数据库,第二个条目‘NORISC6’表示一个 DB2 UDB for iSeries 数据库,而最后的第三个条目‘SAMPLE’则表示一个 DB2 UDB for Linux、UNIX 和 Windows 数据库。本文中所有的示例程序将在适当的地方对这三个数据库进行操作。

图 2. List db directory 输出(系统数据库目录)
List db directory 输出(系统数据库目录)

图 3 显示了对 图 2中所示的三个数据库运行程序 db2conn_ODBC_CLI.c 时的输出。

图 3. dbconn_ODBC_CLI.c 程序输出
dbconn_ODBC_CLI.c 程序输出

分享到:
评论

相关推荐

    IBM DB2 UDB 词汇表.zip

    9. **分区(Partitioning)**:在大型系统中,为了提高性能和可扩展性,DB2 UDB允许将大表和索引分区到多个物理设备上。 10. **复制(Replication)**:DB2 UDB支持数据复制,可以在多个站点间同步数据,用于灾难...

    微软环境DB2 UDB 7.1开发指南

    DB2 UDB 7.1是IBM推出的一款关系型数据库管理系统,它支持多种操作系统,包括Windows,具有高可用性、可伸缩性和安全性。在微软环境中,DB2 UDB能够与.NET Framework、Visual Studio等工具无缝集成,使得开发者能够...

    DB2 UDB 9.1 For AIX 安装指南

    DB2 Universal Database (UDB) 9.1 for AIX 是一款在IBM AIX操作系统上运行的关系型数据库管理系统,提供了高级的数据管理和分析功能。这篇安装指南详细介绍了在AIX环境下安装和配置DB2 UDB v9.1的全过程,适合具有...

    DB2 UDB SQL入门

    DB2 UDB支持ACID(原子性、一致性、隔离性和持久性)事务特性,确保数据的一致性和完整性。`BEGIN`, `COMMIT`, `ROLLBACK`等语句用于管理事务,`SAVEPOINT`用于设置恢复点。此外,DB2 UDB还提供了多版本并发控制...

    DB2 UDB 珍贵资料

    4. 安全性:DB2 UDB提供了一套完善的安全机制,包括用户权限管理、角色授权、数据加密和审计功能,确保数据的安全性和隐私性。 5. 并发控制:采用多版本并发控制(MVCC)机制,允许多个事务同时进行,保证了数据的...

    MySQL to DB2 UDB Conversion Guide

    - **迁移的好处**: 迁移到DB2 UDB可以带来更高的性能、更好的安全性和更多的功能。 - **IBM迁移服务**: IBM提供专业的迁移服务和技术支持,确保迁移项目的顺利进行。 - **教育培训**: IBM还提供了一系列的培训课程,...

    DB2 UDB 内存模型

    DB2 Universal Database (UDB) 是IBM推出的一款企业级关系型数据库管理系统,其内存模型是其性能优化的关键组成部分。理解DB2 UDB的内存模型对于数据库管理员和开发人员来说至关重要,因为它直接影响到数据库的响应...

    调优 DB2 UDB v8

    【DB2 UDB v8 调优指南】 在当今的IT环境中,性能优化是确保应用程序高效运行的关键因素,特别是当这些应用依赖于IBM DB2 Universal Database(DB2 UDB)作为数据存储时。本文主要关注如何针对DB2 UDB v8.1进行调优...

    [IBM] - Oracle to DB2 Udb Conversion Guide.chm

    IBM的Oracle to DB2 Udb Conversion Guide ,英文的,希望对大家有帮助

    DB2 UDB培训资料

    "4、使用SQL语言创建数据对象.doc"将讨论如何利用SQL(Structured Query Language)在DB2中创建、修改和删除数据库对象,如表、视图、索引、存储过程等。SQL是与数据库交互的标准语言,熟练掌握SQL能提高数据库管理...

    DB2 UDB 编程及存储过程

    在“DB2 UDB 编程及存储过程”这个主题中,我们将深入探讨DB2 UDB的编程接口和存储过程的使用,这包括四个部分:1、2、3和4。 首先,编程接口是与DB2 UDB进行交互的关键途径。DB2提供了多种语言的API,如SQLJ(Java...

    db2_udb_v8

    db2_udb_v8开发文档

    DB2 UDB安装指南 图解

    DB2 Universal Database(UDB)是IBM推出的一款企业级关系型数据库管理系统,广泛应用于各种规模的企业,支持多种操作系统平台,包括Windows、Linux、Unix和IBM AIX等。本指南将详细解析DB2 UDB的安装过程,通过...

    DB2 UDB V8.2 Express: 初始配置和经验法则

    DB2 Universal Database (UDB) Express Edition 是针对中小企业的关系数据库管理系统(Relational Database Management System,RDBMS)解决方案,这些企业中一般没有专门的数据库管理员 (DBA)。DB2 UDB Express ...

    DB2 UDB Express-C V9.7 数据库基础 实验

    DB2 Universal Database (UDB) 是IBM开发的一款关系型数据库管理系统,广泛应用于企业级的数据存储和管理。在DB2 UDB Express-C V9.7版本中,它提供了一个免费的社区版,适合小型企业和个人开发者使用,以进行学习、...

    DB2 UDB SQL语句的生命周期.pdf

    DB2 UDB是IBM公司开发的关系型数据库管理系统的一部分,而SQL语句是数据库操作的核心,它们的生命周期通常包含以下几个阶段:提交、分析、编译、执行、清理等。本文将详细介绍DB2 UDB处理SQL语句的整个生命周期,并...

    DB2 UDB Version 8 Product Manuals_Implementation

    DB2 UDB Version 8 的《管理指南:实施篇》是该系列中的一个重要组成部分,它提供了关于如何部署、配置和管理 DB2 数据库系统的关键信息。该指南分为三卷,每一卷都聚焦于不同的方面,以帮助用户更有效地理解和操作 ...

    了解用户和组账户与DB2 UDB的交互

    DB2 UDB安全模型主要包括两部分:身份验证和授权。身份验证就是使用安全机制验证所提供用户ID和口令的过程。用户和组身份验证由DB2 UDB外部的设施管理,比如操作系统、域控制器或者Kerberos安全系统。这和其他数据库...

Global site tag (gtag.js) - Google Analytics