QT通过ODBC连接GBase 8s数据库(Windows)示例

示例环境:

  • 操作系统:Windows 10 64位
  • 数据库及CSDK版本:GBase 8s V8.8_3.0.0_1 64位
  • QT:5.12.0 64位

1,CSDK安装及ODBC配置

1.1,免安装版CSDK

下载免安装版的CSDK驱动,地址:https://gbasedbt.com/dl/odbc/GBase8s_3.0.0_1-Win64-ODBC-Driver.zip

解压到不含中文的目录下,如D盘根目录下,生成gbase8s-odbc-driver目录

使用管理员身份运行 00注册ODBC_管理员权限运行.cmd,将自动注册ODBC。

1.2,ODBC数据源配置

在ODBC数据库(64位)中配置数据源(DSN)

在用户DSN或者系统DSN中,创建新数据源,使用的驱动名称为GBase ODBC DRIVER(64-bit),名称为testdb

连接属性(Connection)和环境(Environment)按实际数据库相应值的进行配置

2,QT创建项目通过ODBC连接数据库测试

打开QT Creator,新建Qt Console Application项目

名称为QtOdbcGBasedbt,目录指定在D:\WORKDIR下

使用qmake编译系统

Kit Selection使用Desktop Qt 5.12.0 MinGW 64-bit

连接数据库操作,需要在QtOdbcGBasedbt.pro配置文件中,增加一行QT =+ sql

在main.cpp中编写连接数据库的代码(使用ODBC连接),可以使用DSN的方式(使用setDatabaseName("ODBC数据源中配置的DSN名称")),或者使用直连(DSN-Less)方式(使用setDatabaseName("ODBC连接字符串(一般包含DRIVER、HOST、SERV、PROT、DB和SRVR等参数)"))

示例使用的完整main.cpp内容如下:

c 复制代码
#include <QCoreApplication>
#include <QtSql>
#include <QSqlDatabase>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
    // 使用DSN方式
    db.setDatabaseName("testdb");       //DSN名称
    // 使用DSN-Less连接方式
    //db.setDatabaseName("DRIVER={GBase ODBC DRIVER (64-bit)};HOST=h01.gbasedbt.com;SERV=9088;PROT=onsoctcp;DLOC=zh_CN.57372;CLOC=zh_CN.57372;DB=testdb;SRVR=gbase01");
    db.setUserName("gbasedbt");         //用户名
    db.setPassword("GBase123$%");       //密码

    bool ok = db.open();//建立数据库连接
    if(!ok){
        qDebug()<<"Can not connect to GBase 8s Database !";
        return -1;
    }
    qDebug()<<"Connect to GBase 8s Database OK .";
    QSqlQuery query(db);
    query.prepare("drop table if exists tab1");
    bool drop = query.exec();
    if (!drop){
        qDebug()<<"drop table error !";
    }
    qDebug()<<"drop table tab1 success .";
    query.prepare("create table tab1 (id varchar(255), ts datetime year to second default current year to second)");
    bool create = query.exec();
    if (!create){
        qDebug()<<"create table tab1 error !";
    }
    qDebug()<<"create table tab1 success .";
    query.prepare("insert into tab1(id) values('test001')");
    bool insert = query.exec();
    if (!insert){
        qDebug()<<"insert table tab1 error !";
    }
    qDebug()<<"insert table tab1 success .";
    query.prepare("select * from tab1 where id = :id");
    query.bindValue(":id","test001");
    bool select = query.exec();
    if (!select){
        qDebug()<<"select table tab1 error !";
    }
    QSqlRecord rec = query.record();
    while(query.next())
    {
        rec = query.record();
        QString value1 = query.value(0).toString();
        QString value2 = query.value(1).toString();
        qDebug()<<"id:"<<value1<<"\t"<<"ts:"<<value2;
    }

    db.close();

    return ok;
}

执行debug测试,输出显示操作成功。

附件:
QtOdbcGBasedbt.zip

相关推荐
踏月的造梦星球13 小时前
DMDPC 学习:架构、部署、运维与调优
运维·数据库·学习·架构
韩楚风14 小时前
【参天引擎】事务生命周期 / MVCC / Undo / ACID / 分布式事务 功能域整体解析
数据库·分布式·mysql·架构·cantian
renhongxia114 小时前
世界模型,是“空中楼阁”还是AGI的“最后一块拼图”?
运维·服务器·数据库·人工智能·算法·agi
程序员无隅15 小时前
Coding Agent 为什么压缩上下文后还能继续工作?上下文模块设计拆解
java·开发语言·数据库
愿做无知一猿15 小时前
Nacos连接MySQL异常?DataGrip竟成救星
数据库·mysql
G.O.G.O.G15 小时前
LeetCode SQL 从入门到精通(MySQL)06(上)
数据库·sql·mysql·leetcode
研究员子楚15 小时前
GEO行业发展标准体系白皮书V2.0-第10卷 · 全球篇:跨国标准协同与全球品牌语义治理框架
数据库·人工智能·microsoft·架构·geo
Omics Pro16 小时前
深度学习多组学互作:组内+组间
数据库·人工智能·深度学习·mysql·搜索引擎·自然语言处理
残*影18 小时前
如何优雅地保存MySQL数据变更历史?
数据库·mysql
乐观的Terry18 小时前
3、数据库设计与领域实体
java·数据库·spring boot·spring cloud·ai编程