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目录
image001.png

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

1.2,ODBC数据源配置

在ODBC数据库(64位)中配置数据源(DSN)
image005.png
在用户DSN或者系统DSN中,创建新数据源,使用的驱动名称为GBase ODBC DRIVER(64-bit),名称为testdb
image007.png
连接属性(Connection)和环境(Environment)按实际数据库相应值的进行配置
image009.png
image011.png

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

打开QT Creator,新建Qt Console Application项目
image013.png
名称为QtOdbcGBasedbt,目录指定在D:WORKDIR下
image015.png
使用qmake编译系统
image017.png
Kit Selection使用Desktop Qt 5.12.0 MinGW 64-bit
image019.png
连接数据库操作,需要在QtOdbcGBasedbt.pro配置文件中,增加一行QT =+ sql
image021.png
在main.cpp中编写连接数据库的代码(使用ODBC连接),可以使用DSN的方式(使用setDatabaseName("ODBC数据源中配置的DSN名称")),或者使用直连(DSN-Less)方式(使用setDatabaseName("ODBC连接字符串(一般包含DRIVER、HOST、SERV、PROT、DB和SRVR等参数)"))
image023.png
示例使用的完整main.cpp内容如下:

#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测试,输出显示操作成功。
image025.png

附件:
QtOdbcGBasedbt.zip

标签: odbc, GBase, QT

添加新评论