示例环境:
- 操作系统: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测试,输出显示操作成功。