`

C++使用CLI连接DB2

 
阅读更多
 
<!--推荐博文-->
 

 

DB2调用层接口(DB2 Call Level Interface简称CLI)是DB2数据库访问的基础接口。

下面例子依次执行了
  • 连接DB2数据库
  • 创建操作句柄
  • 查询操作
  • 新增操作
  • 断开连接
  • 释放资源

示例代码:
cliTest.cpp

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <sqlcli.h>
  4. #include <sqlcli1.h>
  5. #include <sqlenv.h>
  6. #include <sqlda.h>
  7. #include <sqlca.h>
  8. #include <string.h>
  9. using namespace std;
  10. struct result
  11. {
  12. char ename[50];
  13. char cname[100];
  14. int ename_len;
  15. int cname_len;
  16. result()
  17. {
  18. memset(ename, '\0', sizeof(ename));
  19. memset(cname, '\0', sizeof(cname));
  20. }
  21. };
  22. int main()
  23. {
  24. SQLRETURN cliRC = SQL_SUCCESS;
  25. SQLHANDLE henv = SQL_NULL_HENV;
  26. SQLHANDLE hdbc = SQL_NULL_HDBC;
  27. SQLHANDLE hstmt = SQL_NULL_HSTMT;
  28. //获取环境句柄
  29. cliRC = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);
  30. //获取连接句柄
  31. cliRC = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);
  32. cliRC = SQLSetConnectAttr(hdbc,
  33. SQL_ATTR_AUTOCOMMIT,
  34. (SQLPOINTER)SQL_AUTOCOMMIT_OFF,
  35. SQL_IS_INTEGER);
  36. cliRC = SQLConnect(hdbc,
  37. (SQLCHAR *)"mydb",
  38. SQL_NTS,
  39. (SQLCHAR *)"user",
  40. SQL_NTS,
  41. (SQLCHAR *)"passwd",
  42. SQL_NTS);
  43. if (cliRC != SQL_SUCCESS)
  44. {
  45. cout<<"connect fail"<<endl;
  46. }
  47. //设置连接
  48. cliRC = SQLSetConnection(hdbc);
  49. //获取操作句柄
  50. SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);
  51. cliRC = SQLSetStmtAttr(hstmt,
  52. SQL_ATTR_DEFERRED_PREPARE,
  53. (SQLPOINTER)SQL_DEFERRED_PREPARE_ON,
  54. SQL_IS_INTEGER);
  55. cliRC = SQLSetStmtAttr(hstmt, SQL_ATTR_BLOCK_FOR_NROWS, (SQLPOINTER)100, SQL_IS_INTEGER);
  56. if (cliRC == SQL_SUCCESS)
  57. {
  58. cout<<"setStmtAttr"<<endl;
  59. }
  60. //查询语句
  61. const char * strSQL = "select col1, col2 from table1 ";
  62. cliRC = SQLExecDirect(hstmt, (SQLCHAR*)strSQL, SQL_NTS);
  63. if (cliRC == SQL_SUCCESS)
  64. {
  65. cout<<"SQL execute successfully"<<endl;
  66. }
  67. SQLSMALLINT ulColumns = 0;
  68. //获取列数
  69. cliRC = SQLNumResultCols(hstmt, &ulColumns);
  70. if (cliRC == SQL_SUCCESS)
  71. {
  72. cout<<"SQLNumResultCols num="<< ulColumns<<endl;
  73. }
  74. // SQLCHAR szName[50] = "";
  75. // SQLSMALLINT cbNameLen = 0;
  76. // SQLSMALLINT iType = 0;
  77. // SQLUINTEGER ulColumnSize = 0;
  78. // SQLSMALLINT iScale = 0;
  79. // cliRC = SQLDescribeCol(hstmt, (SQLSMALLINT)(0 + 1), szName, 32, &cbNameLen, &iType, &ulColumnSize, &iScale, NULL);
  80. // if (cliRC == SQL_SUCCESS)
  81. // {
  82. // printf("SQLDescribeCol ulColumnSize=[%d]\n", ulColumnSize);
  83. // }
  84. //获取查询结果
  85. SQLPOINTER rgbValue;
  86. SQLINTEGER aaa = 0;
  87. SQLINTEGER *pcbValue = &aaa;
  88. char temp[100] = "";
  89. rgbValue = temp;
  90. struct result rst;
  91. cliRC = SQLBindCol(hstmt, 1, SQL_C_CHAR, rst.ename, sizeof(rst.ename), &rst.ename_len);
  92. cliRC = SQLBindCol(hstmt, 2, SQL_C_CHAR, rst.cname, sizeof(rst.cname), &rst.cname_len);
  93. while(SQLFetch(hstmt) != SQL_NO_DATA_FOUND)
  94. {
  95. cout<<"ename="<<rst.ename<<", cname="<< rst.cname<<endl;
  96. }
  97. //************************************INSERT 操作 ***************************************
  98. const char *insert = " insert into table1 (col1, col2) values('testcli', 'cli')";
  99. cliRC = SQLExecDirect(hstmt, (SQLCHAR*)insert, SQL_NTS);
  100. if (cliRC != SQL_SUCCESS)
  101. {
  102. printf("exec fail \n");
  103. }
  104. //成功操作行数
  105. SQLLEN ulRowEffected = 0;
  106. cliRC = SQLRowCount(hstmt, &ulRowEffected);
  107. cout<<"ulRowEffected = "<<ulRowEffected<<endl;
  108. //结束会话
  109. cliRC = SQLEndTran(SQL_HANDLE_DBC, hdbc, SQL_COMMIT);
  110. //释放资源
  111. cliRC = SQLFreeStmt(hstmt, SQL_UNBIND);
  112. cliRC = SQLFreeStmt(hstmt, SQL_CLOSE);
  113. return 0;
  114. }

源自:http://blog.chinaunix.net/uid-7454512-id-3269938.html

分享到:
评论

相关推荐

    otl.zip_OTL_The Oracle_c++ db2 CLI_db2 cli_otl recordset

    This document describes the Oracle, Odbc and DB2-CLI Template Library, Version 4.0 (OTL 4.0). OTL 4.0 is a C++ library based on templates. It integrates all of the previous releases into one library.

    linux_x64_db2_odbc_cli.tar.gz

    3. **头文件(如: sql.h, sqlext.h)**: 这些头文件包含了ODBC函数的声明,供开发人员在编写连接到DB2的C或C++代码时引用。 4. **配置文件(如: db2cli.ini, sqldbcfg.ini)**: 这些配置文件用于定义数据源(DSN, ...

    DB2 CLI开发手册指南

    DB2 CLI(Call Level Interface)是IBM DB2数据库系统提供的一种编程接口,允许开发者在C或C++等语言中编写应用程序,直接调用数据库功能。它支持多种平台,包括Linux、UNIX和Windows。 #### 2. DB2 CLI与ODBC对比 ...

    DB2的操作DB2的操作 DB2 CLI

    2. **连接到数据库**:通过使用`CONNECT`语句或其他相关函数,应用程序与DB2数据库建立连接。 3. **执行一个或多个事务**:事务是一系列逻辑相关的数据库操作,这些操作作为一个整体被提交或回滚。在DB2中,事务通常...

    IBM DB2 DRIVER DB2驱动(32位)

    IBM DB2 驱动是连接到DB2数据库的关键,对于32位Windows系统,clidriver提供了CLI接口供C和C++开发者使用。安装和配置好驱动后,可以通过多种编程语言实现与DB2的高效交互。对于更详细的使用和配置指导,可以参考...

    IBM DB2 DRIVER DB2驱动(64位)

    在Java环境下,可以使用JDBC(Java Database Connectivity)驱动,通过`Class.forName()`加载DB2的JDBC驱动,然后使用`DriverManager.getConnection()`方法建立数据库连接。在C++中,可能需要利用clidriver目录下的...

    C++实现连接数据库源码

    因此,许多C++库,如DB2 CLI、SQLite3、Poco::Data等,提供了更高级别的封装,使得数据库操作更加直观和安全。例如,Poco::Data库提供了一种面向对象的方式来访问数据库,简化了ODBC的使用。 4. 连接数据库的基本...

    JDBC连接DB2数据库详解.doc--转载

    DB2 UDB支持多种应用程序开发方式,包括基于J2EE的Java编程、Microsoft的API(如ADO和ADO.NET)、C/C++与ODBC/CLI接口、Borland Delphi/Kylix框架、Linux上的开源框架(如Perl、Python和PHP)以及Web服务。...

    DB2 Call Level Interface Guide and Reference

    - **句柄**:DB2 CLI使用了环境句柄、连接句柄和语句句柄来管理资源。 - **连接数据源**:通过连接句柄可以建立与一个或多个数据源的连接。 - **示例**:初始化和连接数据源的例子展示了如何创建环境句柄、连接句柄...

    db2连接.rar

    - CLI连接:启动命令行工具,然后使用`db2 connect to databaseName user username using password`命令连接。 - GUI连接:在IBM Data Studio中,创建新的数据库连接,填写上述的连接参数。 - API连接:在代码中...

    OTL(Oracle, Odbc and DB2-CLI Template Library)技术应用

    OTL(Oracle, Odbc and DB2-CLI Template Library)是一种C++模板库,专门用于高效地访问和操控多种关系数据库系统,包括Oracle、DB2、SQL Server、Sybase、Informix、MySQL、Interbase/Firebird、PostgreSQL、...

    CLI

    在C++编程环境中,了解和使用CLI可以帮助程序员更高效地进行开发和调试。 在C++中,CLI主要涉及到的是.NET框架的C++/CLI(Microsoft Extensions for C++),这是一个用于编写.NET应用程序的C++方言。C++/CLI使得C++...

    c语言查询DB2数据库开发+db2嵌入式c语言开发整理

    - **DB2 CLI (Call Level Interface)**:调用 DB2 CLI 函数来执行动态 SQL 语句。 - **JDBC API (Java Database Connectivity)**:用于 Java 应用程序的数据访问。 - **DAO/RDO/ADO (Data Access Objects/Remote ...

    DB2数据库ODBC驱动

    ODBC驱动的用途广泛,例如,它允许开发者使用支持ODBC的语言(如C++、Python、Java等)编写数据库应用程序,或者让数据库管理工具(如SQL Server Management Studio或DataGrip)连接到DB2数据库。此外,通过ODBC,...

    DB2 9.1驱动

    DB2 9.1的ODBC驱动让非Java应用也能轻松连接到DB2数据库,适用于C++、Visual Basic等编程语言。 3. .NET Framework驱动: 对于.NET开发者,IBM提供了DB2 .NET Data Provider,它是一个.NET Framework兼容的驱动,...

    DB2使用经验积累

    ### DB2使用经验积累 #### 一、DB2专有名词解释 - **Instance(实例)**:DB2实例是DB2数据库系统的核心组件之一,它指的是运行DB2数据库引擎的一个独立进程组。每个实例都有其自己的配置文件和一组运行参数,可以...

    DB2使用经验积累-导入导出-编程-函数-sql优化

    此外,DB2还提供了DB2 CLI(命令行接口)和DB2 JDBC驱动,便于应用程序连接和操作数据库。 **函数** DB2拥有丰富的内置函数集,涵盖了数学、字符串、日期时间、转换等多种类型。例如,`SUBSTR`用于提取字符串的一...

    DB2_SQL语言使用官方参考。pdf

    - **与其他主机系统集成**:DB2支持多种编程语言和开发环境,可以通过ODBC、JDBC、CLI等方式与Java、C/C++等语言进行交互,从而实现跨平台的应用程序开发。 - **注意事项**:文档还提到了使用此文档时的一些重要事项...

    db2开发基础.pdf

    2. 连接到数据库:使用特定的连接语句建立与DB2服务器的连接。 3. 执行事务:事务是一组数据库操作,确保数据的一致性和完整性。一个事务可以包含多个SQL语句,直到提交(COMMIT)或回滚(ROLLBACK)。 4. 断开连接...

Global site tag (gtag.js) - Google Analytics