QODBC 接口
QODBC Driver是QT自带的组件,是QT对ODBC的封装,理论上可以用来连接任何支持ODBC数据源的数据库,比如Access、SQL Server、MySql、HGDB、Oracle等。为数据库编程提供了一个类似JDBC的统一操作模型,它的底层是具体数据库或数据库接口的插件,由它们负责完成真正的数据库操作。
Qt(官方发音 [kju:t],音同 cute) 是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架。它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工具和服务器。Qt是面向对象的框架,使用特殊的代码生成扩展(称为元对象编译器(Meta Object Compiler, moc))以及一些宏,Qt很容易扩展,并且允许真正地组件编程。
Qt Creator是一个用于Qt开发的轻量级跨平台集成开发环境。Qt Creator可带来两大关键益处:提供首个专为支持跨平台开发而设计的集成开发环境 (IDE),并确保首次接触Qt框架的开发人员能迅速上手和操作。即使不开发Qt应用程序,Qt Creator也是一个简单易用且功能强大的IDE。
本章节详细介绍 QT QODBC 连接瀚高数据库。
调用关系
QT应用程序←→QODBC←→unixODBC←→HGDB ODBC
创建一个数据库连接需要三个操作:
开发环境搭建
软件 |
版本 |
HGDB |
安全版V4、企业版v5及以上版本 |
IDE |
Qt Creator 4.10.1 |
前提准备
- ODBC数据源配置:配置方式参照 C\C++部分的ODBC,具体视windows环境、Linux环境操作
- QT开发工具 Qt Creator
示例代码
main.cpp
#include "mainwindow.h" #include <QApplication> #include <QSqlDatabase> #include <QSqlError> #include <QDebug> #include <QSqlQuery> #pragma execution_character_set("utf-8")
int main(int argc, char *argv[]) { QApplication a(argc, argv); //MainWindow w; //w.show();
QString strHost = "192.168.2.5"; int port = 5866; QString strDbName = "test"; QString strUserName = "test"; QString strUserPwd = "test"; QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); QString strconn = QString("Driver={PostgreSQL Unicode(x64)};SERVER=%1;PORT=%2;DATABASE=%3;UID=%4;PWD=%5;") .arg(strHost) .arg(port) .arg(strDbName) .arg(strUserName) .arg(strUserPwd); db.setDatabaseName(strconn); if (!db.open()) { qDebug() <<"error_pgServer:" << db.lastError().text(); return 1201; } else { qDebug() << "连接成功!"; }
QSqlQuery query =QSqlQuery(db); QString str;
//新增数据 query.prepare("insert into student (name,age) values (:name,:age)"); query.bindValue(":name","Qt2"); query.bindValue(":age",24); if(query.exec()) { qDebug() <<"add sucessful!"; } else { qDebug() <<"add failed!"; }
//查询数据 //可以复用上面的QSqlQuery对象,也可以重新new,复用的话需要先调用clear query.clear(); query.exec("select * from student"); while(query.next()) { str = QString("id=%1;name=%2;age=%3") .arg(query.value(0).toInt()) .arg(query.value(1).toString()) .arg(query.value(2).toString()); qDebug() << str; }
//更新数据,如果不加where条件则表示更新整个表的数据 query.clear(); query.prepare("update student set name=:new_name where name=:name"); query.bindValue(":new_name","Qt2222"); query.bindValue(":name","Qt2"); //添加+删除+更新 数据只需要知道执行成功与否就行 if(query.exec()) { qDebug() <<"update sucessful!"; } else { qDebug() <<"update failed!";
}
//关闭数据库,程序自动关闭的时候也会关闭,所以只是用一个数据库的情况下无需手动关闭 db.close();
return a.exec(); }
|
执行结果:
图1:执行了add和update操作

图2:显示为update操作执行后的结果
