C++调用Caché数据库进行数据查询

本文介绍了如何使用C++调用Caché数据库进行数据查询,包括安装、连接、创建表、执行SQL并处理查询结果,以及处理多线程环境中的异常情况。
摘要由CSDN通过智能技术生成

C++调用Caché数据库进行数据查询

最近研究了一下使用C++调用Caché数据库,目前只写了最简单的例子去执行简单的查询语句

首先,安装好Caché数据库之后,在安装目录下找到dev,里面有cpp的头文件和库文件,我们以此为基础进行编写。

第二创建SS_User表,并且插入一些数据。之后我们就可以使用该表进行查询操作了

示例代码

/* qtest.cpp   Multithreaded demo program for LCB and TCP queries
 */

#ifdef WIN32
#  include <windows.h>
#  include <process.h>
#  include <stddef.h>
#endif
#ifdef UNIX
#  include <sys/types.h>
#  include <unistd.h>
#  include <sys/time.h>
#  include <pthread.h>
#endif
#include "lc_connection.h"
#include "cppbind.h"
#include "lc_database.h"

int numRows = 10;
bool verbose = true;
Critical_section_handle cs_handle;
int main()
{
    // 这一句表示连接到Samples命名空间
    Db_err conn_err;
    d_connection conn = tcp_conn::connect("localhost[1972]:Samples",
        "_SYSTEM", "SYS", 0, &conn_err);
    if (conn_err)
    {
        std::cerr << conn_err << '\n';
        return -1;
    }
    try {
        // establish the logical connection to Cache'
        Database db(conn);
        const wchar_t* sql_query;
        sql_query = L"SELECT top 10 SSUSR_RowId, SSUSR_Initials, SSUSR_Name, SSUSR_Password FROM SS_User";
        d_query query(&db);
        int size = (int)wcslen(sql_query);
        query.prepare(sql_query, size);
        query.execute();
        d_string name;
        d_string init_;
        d_string passwd;
        d_int id;
        int rowsFetched = 0;
        while (query.fetch())
        {
            rowsFetched++;
            query.get_data(&id);
            query.get_data(&init_);
            query.get_data(&name);
            query.get_data(&passwd);

            if (verbose)
            {
                Critical_section cs(cs_handle);
                std::cout << "id: " << id
                    << "  name: " << name
                    << "  init_: " << init_
                    << "  passwd: " << passwd << std::endl;
            }
        }
        return 0;
    }
    catch (const Db_err& err) {
        std::cerr << err << '\n';
        return -1;
    }
}

查询输出

id: 1  name: Demo Group  init_: demo  passwd: ccc
id: 2  name: Inpatient Admission  init_: Inpatient  passwd: ccc
id: 3  name: innurse  init_: innurse  passwd: ccc
id: 4  name: DHC Pharmacy  init_: pharmacy  passwd: ccc
id: 5  name: cashier  init_: cashier  passwd: ccc
id: 6  name: doctor  init_: doctor  passwd: ccc
id: 7  name: reg  init_: reg  passwd: ccc
id: 9  name: med manager  init_: med  passwd: ccc
id: 11  name: nurse  init_: nurse  passwd: ccc
id: 662  name: indoctor  init_: indoctor  passwd: ccc

至此我们就完成了查询操作,如果在debug的情况下报assert,这个是因为库输出的是string的原因,只要使用自己的类封装一下再调用即可。

  • 35
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

turbolove

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值