/****************************************************************************

** (c) 版权所有 IBM Corp. 2007 保留所有权利。

** 

** 以下源代码示例("示例")属于国际 

** 商业机器公司或其子公司之一(" IBM "),并且是 

** 有版权和许可证,不得出售。 您可以使用、复制、修改和 

** 在不向 IBM 付费的情况下,以任何形式分发样品,目的是 

** 协助您开发应用程序。

** 

** 示例代码是在 "原样 "的基础上提供给您的,不对以下方面作出保证 

** 任何一种。 IBM 在此,本公司明确声明不作任何保证,无论是明示的还是 

** 默示保证,包括但不限于以下默示保证 

** 适销性和特定用途的适用性。 一些辖区确实 

** 不允许排除或限制默示保证,因此上述 

** 限制或排除条款可能不适用于您。 IBM SHALL NOT BE LIABLE FOR 

** 您因使用、复制、修改或执行以下行为而遭受的任何损失 

** 分发样品,即使 IBM 已被告知可能出现以下情况 

** 此类损害赔偿。

*****************************************************************************

**

** 源文件名称: dbinfo.C

**

** 示例:在数据库级别设置和获取信息

**

** DB2 使用的应用程序接口:

** db2CfgGet -- 获取配置

** db2CfgSet -- 设置配置

**

** 使用的结构:

** sqlca 

**

**                           

*****************************************************************************

**

** 有关示例程序的更多信息,请参阅 README 文件。

**

** 有关开发嵌入式 SQL 应用程序的信息,请参阅《开发嵌入式 SQL 应用程序》一书。

**

** 有关 DB2 API 的信息,请参阅《管理 API 参考》。

**

** 有关编程、编译和运行的最新信息 DB2

** 申请请访问 DB2 信息中心,网址为

**     http://publib.boulder.ibm.com/infocenter/db2luw/v9r7/index.jsp

****************************************************************************/



#include <string.h>

#include <sqlutil.h>

#include <db2ApiDf.h>

#include <sqlenv.h>

#include " utilapi.h "

#if ((__cplusplus >= 199711L ) &&!定义了 DB2HP &&!定义了 DB2AIX )|| \

    ( DB2LINUX && ( __LP64__ || (__gnuc__ >= 3)) ) )

   #include <iostream>

   using namespace std; 

#else

   #include < iostream.h >

#endif



类 DbInfo

{

  public:

    int LocalOrRemoteDbConfigSetGet(char *);

    int LocalOrRemoteDbConfigDefaultsSetGet(char *);



    // 支持功能

    int LocalOrRemoteDbConfigSave(db2Cfg );

    int LocalOrRemoteDbConfigRestore(db2Cfg );

};



int DbInfo::LocalOrRemoteDbConfigSave(db2Cfg cfgStruct )

{

  struct sqlca sqlca;



  // 初始化 paramArray

  cfgStruct.paramArray[0 ].flags = 0;

  cfgStruct.paramArray[0 ].token = SQLF_DBTN_TSM_OWNER;

  cfgStruct.paramArray[0 ].ptrvalue = 新字符[65];

  cfgStruct.paramArray[1 ].flags = 0;

  cfgStruct.paramArray[1 ].token = SQLF_DBTN_MAXAPPLS;

  cfgStruct.paramArray[1 ].ptrvalue = new char[sizeof( sqluint16 )];



  cout << "\n**** SAVE DB CONFIG. FOR:" << cfgStruct.dbname << " ****"

       << endl;



  // 获取数据库配置

  db2CfgGet(db2Version970, (void *)&cfgStruct, &sqlca);

  DB2_API_CHECK( "DB Config. -- 保存");



  return 0;

} //DbInfo::LocalOrRemoteDbConfigSave



int DbInfo::LocalOrRemoteDbConfigRestore(db2Cfg cfgStruct )

{

  struct sqlca sqlca;



  cout << "\n*** RESTORE DB CONFIG. FOR:" << cfgStruct.dbname << " ***"

       << endl;



  // 设置数据库配置

  db2CfgSet(db2Version970, (void *)&cfgStruct, &sqlca);

  DB2_API_CHECK( "DB Config. -- 还原");



  删除 [] cfgStruct.paramArray[0 ].ptrvalue;

  删除 [] cfgStruct.paramArray[1 ].ptrvalue;



  return 0;

} //DbInfo::LocalOrRemoteDbConfigRestore



int DbInfo::LocalOrRemoteDbConfigSetGet(char *dbAlias )

{

  struct sqlca sqlca;

  db2CfgParam cfgParameters[2];

  db2Cfg cfgStruct;



  cout << "\n-----------------------------------------------------------";

  cout << ""\nUSE THE DB2 APIs:" << endl;

  cout << " db2CfgGet -- GET CONFIGURATION" << endl;

  cout << " db2CfgSet -- 设置配置" << endl;

  cout << "TO SET/GET DATABASE CONFIGURATION PARAMETERS:" << endl;



  // 初始化 cfgParameters

  cfgParameters[0 ].flags = 0;

  cfgParameters[0 ].token = SQLF_DBTN_TSM_OWNER;

  cfgParameters[0 ].ptrvalue = 新字符[65];

  cfgParameters[1 ].flags = 0;

  cfgParameters[1 ].token = SQLF_DBTN_MAXAPPLS;

  cfgParameters[1 ].ptrvalue = new char[sizeof( sqluint16 )];



  // 设置两个数据库配置参数

  strcpy( cfgParameters[0 ].ptrvalue, "tsm_owner");

  *( sqluint16 *)( cfgParameters[1 ].ptrvalue) = 50;



  cout << "\n Set database configuration parameters for the \""

       << dbAlias << "\" 数据库:" << endl;

  cout << " TSM owner = " << cfgParameters[0 ].ptrvalue << endl;

  cout << " maxappls = "

       << *( sqluint16 *)( cfgParameters[1 ].ptrvalue) << endl;



  // 初始化 cfgStruct

  cfgStruct.numItems = 2;

  cfgStruct.paramArray = cfgParameters;

  cfgStruct.flags = db2CfgDatabase | db2CfgDelayed;

  cfgStruct.dbname = dbAlias;



  // 设置数据库配置

  db2CfgSet(db2Version970, (void *)&cfgStruct, &sqlca);

  DB2_API_CHECK( "DB Config. -- 设置");



  // 获取两个数据库配置参数

  strcpy( cfgParameters[0 ].ptrvalue, "");

  *( sqluint16 *)( cfgParameters[1 ].ptrvalue) = 0;



  cout << " Get two database configuration parameters for the \""

       << dbAlias << "\" 数据库:" << endl;



  // 获取数据库配置

  db2CfgGet(db2Version970, (void *)&cfgStruct, &sqlca);

  DB2_API_CHECK( "DB Config. -- 获取");



  cout << " TSM owner = " << cfgParameters[0 ].ptrvalue << endl;

  cout << " maxappls = " << *( sqluint16 *)( cfgParameters[1 ].ptrvalue)

       << endl;



  // 释放已分配的内存

  删除 [] cfgParameters[0 ].ptrvalue;

  删除 [] cfgParameters[1 ].ptrvalue;



  return 0;

} //DbInfo::LocalOrRemoteDbConfigSetGet



int DbInfo::LocalOrRemoteDbConfigDefaultsSetGet(char *dbAlias )

{

  struct sqlca sqlca;

  db2CfgParam cfgParameters[2];

  db2Cfg cfgStruct;



  cout << "\n-----------------------------------------------------------";

  cout << ""\nUSE THE DB2 APIs:" << endl;

  cout << " db2CfgSet -- 设置配置" << endl;

  cout << " db2CfgGet -- GET CONFIGURATION" << endl;

  cout << "TO SET/GET DATABASE CONFIGURATION DEFAULTS:" << endl;



  // 初始化 cfgParameters

  cfgParameters[0 ].flags = 0;

  cfgParameters[0 ].token = SQLF_DBTN_TSM_OWNER;

  cfgParameters[0 ].ptrvalue = 新字符[65];

  cfgParameters[1 ].flags = 0;

  cfgParameters[1 ].token = SQLF_DBTN_MAXAPPLS;

  cfgParameters[1 ].ptrvalue = new char[sizeof( sqluint16 )];



  // 设置所有数据库配置默认值

  cout << "\n Set all database configuration defaults for the \""

       << dbAlias << "\" 数据库." << endl;



  // 设置 cfgStruct

  cfgStruct.numItems = 0;

  cfgStruct.paramArray = NULL;

  cfgStruct.flags = db2CfgDatabase | db2CfgReset | db2CfgDelayed;

  cfgStruct.dbname = dbAlias;



  // 重置数据库配置

  db2CfgSet(db2Version970, (void *)&cfgStruct, &sqlca);

  DB2_API_CHECK( "DB 配置默认值 - 设置");



  // 获取两个数据库配置。 缺省值

  strcpy( cfgParameters[0 ].ptrvalue, "");

  *( sqluint16 *)( cfgParameters[1 ].ptrvalue) = 0;



  cout << " Get two database configuration defaults for the \""

       << dbAlias << "\" 数据库:" << endl;



  // 设置 cfgStruct

  cfgStruct.numItems = 2;

  cfgStruct.paramArray = cfgParameters;

  cfgStruct.flags = db2CfgDatabase | db2CfgGetDefaults;

  cfgStruct.dbname = dbAlias;



  // 获取数据库配置默认值

  db2CfgGet(db2Version970, (void *)&cfgStruct, &sqlca);

  DB2_API_CHECK( "DB 配置默认值 -- 获取");



  cout << " TSM owner = " << cfgParameters[0 ].ptrvalue << endl;

  cout << " maxappls = " << *( sqluint16 *)( cfgParameters[1 ].ptrvalue)

       << endl;



  // 释放已分配的内存

  删除 [] cfgParameters[0 ].ptrvalue;

  删除 [] cfgParameters[1 ].ptrvalue;



  return 0;

} //DbInfo::LocalOrRemoteDbConfigDefaultsSetGet



int main(int argc, char *argv[])

{

  int rc = 0;

  CmdLineArgs 检查;

  DbInfo 信息

  Db db;

  实例 inst;

  db2CfgParam cfgParameters[2 ]; // 保存数据库配置。

  db2Cfg cfgStruct;



  // 检查命令行参数

  rc = check.CmdLineArgsCheck3(argc, argv, db, inst);

  如果 (rc!= 0)

  {

    return rc;

  }



  cout << ""\nTHIS SAMPLE SHOWS HOWS TO SET/GET INFO AT DATABASE LEVEL."

       << endl;



  // 附加到本地或远程实例

  rc = inst.Attach ();

  如果 (rc!= 0)

  {

    return rc;

  }



  // 初始化 cfgStruct

  cfgStruct.numItems = 2;

  cfgStruct.paramArray = cfgParameters;

  cfgStruct.flags = db2CfgDatabase | db2CfgDelayed;

  cfgStruct.dbname = db.getAlias( );



  // 保存数据库。 配置

  rc = info.LocalOrRemoteDbConfigSave(cfgStruct );

  如果 (rc!= 0)

  {

    return rc;

  }



  // 与 DB. 配置

  rc = info.LocalOrRemoteDbConfigSetGet(db.getAlias( ));

  rc = info.LocalOrRemoteDbConfigDefaultsSetGet(db.getAlias( ));



  // 恢复数据库配置

  rc = info.LocalOrRemoteDbConfigRestore(cfgStruct );



  // 与本地或远程实例分离

  rc = inst.Detach ();

  如果 (rc!= 0)

  {

    return rc;

  }



  return 0;

}//main