一.Qt对数据库的支持
Qt中的数据库模块QtSql模块提供了对数据库的支持,该模块中的众多类基本上可分为3层:
- 1.用户接口层
- QSqlQueryModel :Read-only data model for SQL result sets
QSqlTableModel :Editable data model for a single database table
QSqlRelationalTableModel :Editable data model for a single database table, with foreign key support
- 2.SQL接口层
- QSqlDatabase
- QSqlError
- QSqlField
- QSqlIndex
- QSqlQuery
- QSqlRecord
- QSqlRelation
- QSqlRelationalDelegate
- 3.sql驱动层
- QSqlResult
- QSqlDriver
- QSqlDriverCreator
- QSqlDriverCreatorBase
- QSqlDriverPlugin
用户接口层:
这个层中的几个类实现了将数据库中的数据链接到窗口部件上,这些类是使用模型/框架来实现的,它们是高层次的抽象,不熟SQL也可以来操作数据库.
SQL 接口层:
提供了对数据库的访问.
驱动层:
为具体的数据库和SQL接口层提供了底层的桥梁.
二.Qt下连接数据库的方法
- //指定连接数据库的驱动
- QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
- //连接到的主机名
- db.setHostName("bigblue");
- //连接到的数据库名称
- db.setDatabaseName("flightdb");
- //用户名
- db.setUserName("acarlson");
- //密码
- db.setPassword("123456");
- bool ok=db.open();
三.Qt驱动数据库的实例
3.1工程文件:database.pro
- SOURCES += \
- main.cpp
- QT += sql
- HEADERS += \
- connection.h
3.2头文件:connection.h
- #ifndef CONNECTION_H
- #define CONNECTION_H
- #include <QMessageBox>
- #include <QSqlDatabase>
- #include <QSqlQuery>
- static bool createConnection()
- {
- QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");
- db.setDatabaseName(":memory:");
- if (!db.open()) {
- QMessageBox::critical(0, "Cannot open database",
- "Unable to establish a database connection.", QMessageBox::Cancel);
- return false;
- }
- QSqlQuery query;
- query.exec("create table student (id int primary key, "
- "name varchar(20))");
- query.exec("insert into student values(0, 'LiMing')");
- query.exec("insert into student values(1, 'LiuTao')");
- query.exec("insert into student values(2, 'WangHong')");
- return true;
- }
- #endif // CONNECTION_H
3.3主文件main.cpp
- #include <QApplication>
- #include <QSqlDatabase>
- #include <QDebug>
- #include <QStringList>
- #include "connection.h"
- #include <QVariant>
- int main(int argc, char *argv[])
- {
- QApplication a(argc, argv);
- // 创建数据库连接
- if (!createConnection()) return 1;
- // 使用QSqlQuery查询整张表
- QSqlQuery query;
- query.exec("select * from student");
- while(query.next())
- {
- qDebug() << query.value(0).toInt() << query.value(1).toString();
- }
- return a.exec();
- }
转载于:https://blog.51cto.com/qtlinux/1183735