文章目录
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的原因,只要使用自己的类封装一下再调用即可。