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内容如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | #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测试,输出显示操作成功。