最近学习了Qt5下的数据库操作,特做此笔记,总结一下,与大家共勉,其中许多内容借鉴于霍亚飞老师的书籍——《Qt Creator快速入门(第二版)》。
软件版本:Qt Creator 3.1.2(opensource)
Based on Qt 5.3.1(MSVC 2010, 32 bit)
Built on Jun 23 2014 at 04:13:10
1. 数据库简介
Qt中的 QtSql 模块提供了对数据库的支持,该模块中的众多类基本上可以分为3层,如下表所示。
层次 | Qt提供的类 |
---|---|
用户接口层 | QSqlQueryModel、QSqlTableModel 和 QSqlRelationalTableModel |
SQL接口层 | QSqlDatabase、QSqlQuery、QSqlError、QSqlField、QSqlIndex 和 QSqlRecord |
驱动层 | QSqlDriver、QSqlDriverCreator< T >、QSqlDriverCreatorBase、QSqlDriverPlugin 和 QSqlResult |
其中,驱动层为具体的数据库和SQL接口层之间提供了底层的桥梁;
SQL接口层提供了对数据库的访问,其中的 QSqlDatabase 类用来创建连接,QSqlQuery 类可以使用 SQL 语句来实现与数据库交互,其他几个类对该层提供了支持;用户接口层的几个类实现了将数据库中的数据链接到窗口部件上,这些类是使用 模型/视图 框架实现的,它们是更高层次的抽象,即便不熟悉 SQL 也可以操作数据库。如果要使用 QtSql 模块中的这些类,需要在项目文件(.pro 文件)中添加“QT+=sql”这行代码。对应数据库部分的内容,可以在帮助中查看 SQL Programming 关键字。
2. QqlDatabase 类中的函数
class Q_SQL_EXPORT QSqlDatabase
{
public:
QSqlDatabase();
QSqlDatabase(const QSqlDatabase &other);
~QSqlDatabase();
QSqlDatabase &operator=(const QSqlDatabase &other);
bool open();
bool open(const QString& user, const QString& password);
void close();
bool isOpen() const;
bool isOpenError() const;
QStringList tables(QSql::TableType type = QSql::Tables) const;
QSqlIndex primaryIndex(const QString& tablename) const;
QSqlRecord record(const QString& tablename) const;
QSqlQuery exec(const QString& query = QString()) const;
QSqlError lastError() const;
bool isValid() const;
bool transaction();
bool commit();