/****************************************************************************
** (c) Copyright IBM Corp. 2007 保留所有权利。
**
** 以下源代码示例("示例")属于国际
** 商业机器公司或其子公司之一(" IBM "),并且是
** 有版权和许可证,不得出售。 您可以使用、复制、修改和
** 在不向 IBM 付费的情况下,以任何形式分发样品,目的是
** 协助您开发应用程序。
**
** 示例代码是在 "原样 "的基础上提供给您的,不对以下方面作出保证
** 任何一种。 IBM 在此,本公司明确声明不作任何保证,无论是明示的还是
** 隐含保证,包括但不限于以下隐含保证
** 适销性和特定用途的适用性。 一些辖区确实
** 不允许排除或限制默示保证,因此上述
** 限制或排除条款可能不适用于您。 IBM SHALL NOT BE LIABLE FOR
** 您因使用、复制、修改或执行以下行为而遭受的任何损失
** 分发样品,即使 IBM 已被告知可能出现以下情况
** 此类损害赔偿。
*****************************************************************************
**
** 源文件名称: dbpkg.sqC
**
** 示例:如何使用软件包
**
** DB2 使用的应用程序接口:
** sqlaprep -- 预编译程序
** sqlabndx -- BIND
** sqlarbnd -- 重定向软件包
**
** 使用的 sql 语句:
* * 降级包
**
**
*****************************************************************************
**
** 有关示例程序的更多信息,请参阅 README 文件。
**
** 有关开发嵌入式 SQL 应用程序的信息,请参阅《开发嵌入式 SQL 应用程序》一书。
**
** 有关使用 SQL 语句的信息,请参阅《SQL 参考》。
**
** 有关 DB2 API 的信息,请参阅《管理 API 参考》。
**
** 有关编程、编译和运行的最新信息 DB2
** 申请请访问 DB2 信息中心,网址为
** http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp
****************************************************************************/
#include <string.h>
#include <sql.h>
#include <sqlenv.h>
#include <sqlutil.h>
#include " utilemb.h "
#if ((__cplusplus >= 199711L ) &&!定义了 DB2HP &&!定义了 DB2AIX )|| \
( DB2LINUX && ( __LP64__ || (__gnuc__ >= 3)) ) )
#include <iostream>
using namespace std;
#else
#include < iostream.h >
#endif
类 DbPkg
{
public:
int BndFileCreate(char *);
int PackageCreate(char *);
int PackageRefresh(char *);
int PackageDrop( );
};
int DbPkg::BndFileCreate(char *sourceFileBaseName )
{
struct sqlca sqlca;
char sourceFileName[8 + 1 + 3 + 1];
char msgFileName[8 + 1 + 3 + 1];
结构 sqlopt *pPrecompileOptions;
struct sqloptions *optionsArray;
cout << "\n-----------------------------------------------------------";
cout << ""\nUSE THE DB2 API:" << endl;
cout << " sqlaprep -- PRECOMPILE PROGRAM" << endl;
cout << "TO CREATE A BIND FILE." << endl;
// 创建软件包
strcpy( sourceFileName, sourceFileBaseName );
#if (defined( DB2NT ))
strcat( sourceFileName, ".sqx");
#else // UNIX
strcat( sourceFileName, ".sqC" );
#endif
strcpy( msgFileName, sourceFileBaseName );
msgFileName[6 ] = '\0'; // 截断至 6 个字符
strcat( msgFileName, " _p.msg "); // _p = 预编译
cout << "\n Create the bind file." << endl;
cout << " 源文件名 : " << sourceFileName << endl;
cout << " 绑定文件名 : " << sourceFileBaseName << ".bnd" << endl;
cout << " 消息文件名: " << msgFileName << endl;
// 对于 1 个选项,不需要更多的 struct sqloptions,因为
// struct sqlopt 已经包含一个
pPrecompileOptions = new sqlopt[1];
pPrecompileOptions->header.allocated = 1; // 选项数量
pPrecompileOptions->header.used = 1;
optionsArray = pPrecompileOptions->option;
optionsArray[0 ].type = SQL_BIND_OPT;
optionsArray[0 ].val = 0; // 创建默认 bnd 文件
// 预编译程序
sqlaprep( sourceFileName, msgFileName, pPrecompileOptions, &sqlca);
DB2_API_CHECK( "Bnd文件--创建");
// 释放分配的内存
删除 [] pPrecompileOptions;
return 0;
} //DbPkg::BndFileCreate
int DbPkg::PackageCreate(char *sourceFileBaseName )
{
struct sqlca sqlca;
char bndFileName[8 + 1 + 3 + 1];
char msgFileName[8 + 1 + 3 + 1];
结构 sqlopt *pBindOptions;
struct sqloptions *optionsArray;
cout << "\n-----------------------------------------------------------";
cout << ""\nUSE THE DB2 API:" << endl;
cout << " sqlabndx -- BIND" << endl;
cout << "TO CREATE A PACKAGE." << endl;
// 创建软件包
strcpy( bndFileName, sourceFileBaseName );
strcat( bndFileName, ".bnd");
strcpy( msgFileName, sourceFileBaseName );
msgFileName[6 ] = '\0'; // 截断至 6 个字符
strcat( msgFileName, " _b.msg "); // _b = bind
cout << "\n Create the package." << endl;
cout << " 绑定文件名 : " << bndFileName << endl;
cout << " 软件包名称 : " << sourceFileBaseName << endl;
cout << " 消息文件名: " << msgFileName << endl;
// 对于 2 个选项,还需要一个 struct sqloptions,因为
// struct sqlopt 已经包含一个
pBindOptions = new sqlopt[2];
pBindOptions->header.allocated = 2; // 选项数量
pBindOptions->header.used = 2;
optionsArray = pBindOptions->option;
optionsArray[0 ].type = SQL_BLOCK_OPT;
optionsArray[0 ].val = SQL_BL_ALL; // 游标阻塞 = 全部阻塞
optionsArray[1 ].type = SQL_ISO_OPT;
optionsArray[1 SQL_CURSOR_STAB; // isol. 水平 = 光标移动。
// 调用绑定工具
sqlabndx( bndFileName, msgFileName, pBindOptions, &sqlca);
DB2_API_CHECK( "软件包 -- 创建");
// 释放分配的内存
删除 [] pBindOptions;
return 0;
} //DbPkg::PackageCreate
int DbPkg::PackageRefresh(char *sourceFileBaseName )
{
struct sqlca sqlca;
char packageName[8 + 1];
结构 sqlopt *pRebindOptions;
cout << "\n-----------------------------------------------------------";
cout << ""\nUSE THE DB2 API:" << endl;
cout << " sqlarbnd -- 重定向软件包" << endl;
cout << "TO REFRESH A PACKAGE." << endl;
// 刷新软件包
pRebindOptions = NULL;
strcpy( packageName, sourceFileBaseName );
cout << "\n 刷新软件包:" << packageName << endl;
// 重新绑定 - 重新创建存储在数据库中的软件包,而不使用
// 需要绑定文件
sqlarbnd( packageName, &sqlca, pRebindOptions );
DB2_API_CHECK( "软件包 -- 刷新");
return 0;
} //DbPkg::PackageRefresh
int DbPkg::PackageDrop( )
{
struct sqlca sqlca;
cout << "\n-----------------------------------------------------------";
cout << ""\nUSE THE SQL STATEMENT:" << endl;
cout << " DROP " << endl;
cout << "TO DROP A PACKAGE." << endl;
// 删除软件包
cout << "\n 执行语句" << endl;
cout << " DROP PACKAGE dbconn" << endl;
EXEC SQL DROP PACKAGE dbconn;
EMB_SQL_CHECK("Package -- Drop");
return 0;
} //DbPkg::PackageDrop
int main(int argc, char *argv[])
{
int rc = 0;
CmdLineArgs 检查;
DbPkg 包
DbEmb db;
char sourceFileBaseName[8 + 1];
// 检查命令行参数
rc = check.CmdLineArgsCheck1(argc, argv, db);
如果 (rc!= 0)
{
return rc;
}
strcpy( sourceFileBaseName, "dbconn");
cout << ""\nTHIS SAMPLE SHOWS HOW TO WORK WITH PACKAGES." << endl;
// 连接到数据库
rc = db.Connect ();
如果 (rc!= 0)
{
return rc;
}
rc = pkg.BndFileCreate(sourceFileBaseName );
rc = pkg.PackageCreate(sourceFileBaseName );
rc = pkg.PackageRefresh(sourceFileBaseName );
rc = pkg.PackageDrop( );
// 从数据库断开连接
rc = db.Disconnect ();
如果 (rc!= 0)
{
return rc;
}
return 0;
}//main