热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

Linux下基于C++的DB2CLI开发-mysql教程

db2数据库提供了一套自己的应用程序编程接口(API)---db2calllevelinterface,简称为db2cli编程接口,目前支持C和C++。db2cl

db2数据库提供了一套自己的应用程序编程接口(API)---db2 call level interface,简称为db2cli编程接口,目前支持C和C++。db2cl

db2数据库提供了一套自己的应用程序编程接口(API)---db2 call level interface,简称为db2cli编程接口,目前支持C和C++。

db2cli基于MicrosoftOpenDatabaseConnectivity(ODBC)规范实现。

以C++为例进行db2cli编程,对db2数据库进行操作。

源代码首先需要include入“sqlcli1.h”,这是最新版本的db2cli提供的头文件,该头文件中会自动引用db2cli的其他相关头文件。

引入了“sqlcli1.h”后,代码中就可以使用db2cli进行编程了,下文会详细介绍使用db2cli编程操作db2数据库的大致步骤,先讲下源代码的编译。

假设源代码文件为db2test.cpp,编译命令为

  g++ -L/home/db2inst1/sqllib/lib32 -I/home/db2inst1/sqllib/include/ -ldb2

db2test.cpp

-L是库搜索路径,编译中需要用到的libdb2.so就在存放在该路径下;-I是头文件搜索路径,sqlcli1.h和其他引用的头文件都在该路径下;-ldb2是指定编译时用到的库文件libdb2.so,格式为-l$库文件名称后半部分。

这样的话就会生成默认的目标文件a.out。

代码中使用db2cli操作db2数据库的大致步骤如下,首先使用SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv)获取一个数据库的环境句柄。SQL_HANDLE_ENV是入参,标识需要获取一个什么类型的数据库句柄;SQL_NULL_HANDLE是入参,是需要输入的前提句柄;&henv是出参,获取到的句柄地址会存放在&henv。

可能需要使用SQLSetEnvAttr()来设置环境句柄的一些参数。

然后再使用SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc)来分配一个数据库的连接句柄。

可能需要使用SQLSetConnectAttr()来设置连接句柄的一些参数。

然后使用SQLConnect(hdbc,db,SQL_NTS,user,SQL_NTS,pwd,SQL_NTS)来连接名称为db的数据库。

到这数据库连接就初始化完成了,下面可以使用语句句柄执行具体的db2命令了。

以查询语句

select version from NE12.TBL_0_20080906

为例,介绍使用db2cli执行具体的db2命令的大致步骤。

首先使用SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hstmt)来获取一个语句句柄hstmt。

然后使用SQLPrepare(hstmt,$SQL,$SQL.length)来将SQL语句和语句句柄绑定,$SQL.length是SQL语句的长度。

然后就可以执行该SQL语句了,SQL语句的执行分为几种情况,有SQL中包含参数和不包含参数的,有查询类SQL语句和非查询类SQL语句,不一一介绍,详细可以参考db2信息中心。SQL语句通过调用SQLExcute(hstmt)或SQLExeDirect(hstmt,$SQL,$SQL.length)执行。两个函数的主要区别在于SQLExcute()可以多次被调用以达到多次执行绑定到该语句句柄上SQL语句的目的,而SQLExeDirecte()多用于只执行一次的SQL语句。

如果有返回结果的话可以在执行SQL语句之前使用SQLBindCol(hstmt,

ColNum,DataType,&DataValue,BufferLen,&StrLen)来实现将db2返回结果的某列值绑定到制定的存储位置。ColNum是需要绑定的列在返回结果中的列序号,DataType指明该列的数据类型,&DataValue是缓存该列的一行数据的临时存储空间,BufferLen是缓存空间的大小,&StrLen是存放返回结果大小的地址。

上面之所以需要绑定一个临时存储空间,是因为取返回结果时需要按列一行一行的顺序获取,执行完SQL语句后,紧接着执行SQLFetch(),db2就会将返回结果的各列的一行数据按事先绑定的规则放置到指定的缓存空间去,,从缓存空间中获取完这一行数据后,紧接着再执行SQLFetch()就可以获取下一行数据,依此类推,直至执行SQLFetch()返回失败,则表示结果已取完。

完成了对数据库的相关操作之后需要将之前申请的数据库连接进行释放,释放的大致步骤如下,使用SQLFreeHandle(SQL_HANDLE_STMT,hstmt)释放语句句柄;

使用SQLDisconnect(hdbc)断开数据库连接句柄和相应数据库的连接;

使用SQLFreeHandle(SQL_HANDLE_DBC,hdbc)释放连接句柄;

使用SQLFreeHandle(SQLP_HANDLE_ENV,henv)释放环境句柄。

至此数据库连接的清理工作完成。

linux

推荐阅读
  • 在Java分层设计模式中,典型的三层架构(3-tier application)将业务应用细分为表现层(UI)、业务逻辑层(BLL)和数据访问层(DAL)。这种分层结构不仅有助于提高代码的可维护性和可扩展性,还能有效分离关注点,使各层职责更加明确。通过合理的设计和实现,三层架构能够显著提升系统的整体性能和稳定性。 ... [详细]
  • 数据库多表联合查询:内连接与外连接详解
    在数据库的多表查询中,内连接和外连接是两种常用的技术手段。内连接用于检索多个表中相互匹配的记录,即只有当两个表中的记录满足特定的连接条件时,这些记录才会被包含在查询结果中。相比之下,外连接则不仅返回匹配的记录,还可以选择性地返回不匹配的记录,具体取决于左外连接、右外连接或全外连接的选择。本文将详细解析这两种连接方式的使用场景及其语法结构,帮助读者更好地理解和应用多表查询技术。 ... [详细]
  • 使用SQL命令创建数据库及其语句解析
    使用 `CREATE DATABASE` 命令可以创建一个新的数据库,并指定其名称。该 SQL 语句用于初始化数据库结构,执行后将生成一个新的数据库实例,用于存储相关的数据对象和表。在本例中,通过执行 `CREATE DATABASE 课程管理1`,系统将创建一个名为“课程管理1”的数据库,以便后续的数据管理和操作。 ... [详细]
  • 如何高效地安装并配置 PostgreSQL 数据库系统?本文将详细介绍从下载到安装、配置环境变量、初始化数据库、以及优化性能的全过程,帮助读者快速掌握 PostgreSQL 的核心操作与最佳实践。文章还涵盖了常见问题的解决方案,确保用户在部署过程中能够顺利解决遇到的各种挑战。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • SSAS入门指南:基础知识与核心概念解析
    ### SSAS入门指南:基础知识与核心概念解析Analysis Services 是一种专为决策支持和商业智能(BI)解决方案设计的数据引擎。该引擎能够为报告和客户端应用提供高效的分析数据,并支持在多维数据模型中构建高性能的分析应用。通过其强大的数据处理能力和灵活的数据建模功能,Analysis Services 成为了现代 BI 系统的重要组成部分。 ... [详细]
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • 二十六、Java开发实战:PL/SQL轻松实现远程数据库连接
    通过 PL/SQL Developer 实现远程数据库连接的详细步骤如下:首先启动 PL/SQL Developer 软件,然后在登录界面中准确输入用户名和密码;接着在数据库连接配置中,按照 IP:Port/SID 的格式填写目标数据库的地址信息。此外,确保网络环境畅通无阻,并检查防火墙设置以避免连接失败。 ... [详细]
  • 在Node.js中调用MySQL存储过程`updateUser(p1, p2, @p3)`时,其中`@p3`为输出参数。若更新操作失败,则返回0;成功则返回1。本文将详细介绍如何正确获取存储过程的返回结果,并确保在实际应用中能够顺利执行。 ... [详细]
  • 深入解析数据库中的存储过程与触发器技术
    本文深入探讨了数据库中的存储过程与触发器技术。存储过程是一组预编译的SQL语句,经过优化后存储在数据库服务器中,以提高执行效率。在大型数据库系统中,通过调用存储过程的名字,用户可以快速执行复杂的操作,从而提升系统的性能和响应速度。此外,触发器作为一种特殊的存储过程,能够在特定事件发生时自动执行,进一步增强了数据库的自动化管理和数据完整性。 ... [详细]
  • 深入解析MySQL中的回表查询与索引覆盖技术
    在MySQL中,回表查询与索引覆盖技术是优化查询性能的重要手段。回表查询是指当使用非聚集索引进行查询时,由于非聚集索引的B-Tree叶子节点中仅存储了对应行数据的主键值,因此需要通过主键再次访问聚簇索引来获取完整数据记录。而索引覆盖则是在查询所需的所有列都包含在某个索引中,从而避免了额外的回表操作,显著提高了查询效率。本文将深入探讨这两种技术的原理及其应用场景,帮助读者更好地理解和优化MySQL查询性能。 ... [详细]
  • 如何使用mysql_nd:Python连接MySQL数据库的优雅指南
    无论是进行机器学习、Web开发还是爬虫项目,数据库操作都是必不可少的一环。本文将详细介绍如何使用Python通过 `mysql_nd` 库与 MySQL 数据库进行高效连接和数据交互。内容涵盖以下几个方面: ... [详细]
  • Spring框架的核心组件与架构解析 ... [详细]
  • 本文详细探讨了MySQL数据库实例化参数的优化方法及其在实例查询中的应用。通过具体的源代码示例,介绍了如何高效地配置和查询MySQL实例,为开发者提供了有价值的参考和实践指导。 ... [详细]
  • PostgreSQL 与 MySQL 的主要差异及应用场景分析
    本文详细探讨了 PostgreSQL 和 MySQL 在架构、性能、功能以及适用场景方面的关键差异。通过对比分析,帮助读者更好地理解两种数据库系统的特性和优势,为实际应用中的选择提供参考。 ... [详细]
author-avatar
中国人TM
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有