【Qt】Qt数据库驱动层
00. 目錄
文章目錄
- 00. 目錄
- 01. Qt驅動層
- 02. QSqlDriver
- 03. QSqlDriverCreator
- 04. QSqlDriverCreatorBase
- 05. QSqlDriverPlugin
- 06. QSqlResult
- 07. 附錄
01. Qt驅動層
驅動層為具體的數據庫和SQL接口層之間提供了底層的橋梁,主要類包括QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorBase、QSqlDriverPlugin和QSqlResult。
02. QSqlDriver
QSqlDriver是訪問具體SQL數據庫的抽象基類,不能直接使用。如果要創建自定義的數據庫驅動,可以根據需要重寫QSqlDriver類的純虛函數和虛函數。
該類不能直接使用,如果要使用使用QSqlDatabase代替。
QSqlDatabase負責加載和管理數據庫驅動插件。當某個數據庫添加時,相應的數據庫驅動插件會被加載。QSqlDatabase依靠驅動插件為QSqlDriver和QSqlResult提供接口。
QSqlDriver是定義了SQL數據庫功能的抽象基類。
公有成員方法
QSqlDriver(QObject *parent = nullptr) virtual ~QSqlDriver() virtual bool beginTransaction() virtual void close() = 0 virtual bool commitTransaction() virtual QSqlResult * createResult() const = 0 virtual QString escapeIdentifier(const QString &identifier, QSqlDriver::IdentifierType type) const virtual QString formatValue(const QSqlField &field, bool trimStrings = false) const virtual QVariant handle() const virtual bool hasFeature(QSqlDriver::DriverFeature feature) const = 0 virtual bool isIdentifierEscaped(const QString &identifier, QSqlDriver::IdentifierType type) const virtual bool isOpen() const bool isOpenError() const QSqlError lastError() const QSql::NumericalPrecisionPolicy numericalPrecisionPolicy() const virtual bool open(const QString &db, const QString &user = QString(), const QString &password = QString(), const QString &host = QString(), int port = -1, const QString &options = QString()) = 0 virtual QSqlIndex primaryIndex(const QString &tableName) const virtual QSqlRecord record(const QString &tableName) const virtual bool rollbackTransaction() void setNumericalPrecisionPolicy(QSql::NumericalPrecisionPolicy precisionPolicy) virtual QString sqlStatement(QSqlDriver::StatementType type, const QString &tableName, const QSqlRecord &rec, bool preparedStatement) const virtual QString stripDelimiters(const QString &identifier, QSqlDriver::IdentifierType type) const virtual bool subscribeToNotification(const QString &name) virtual QStringList subscribedToNotifications() const virtual QStringList tables(QSql::TableType tableType) const virtual bool unsubscribeFromNotification(const QString &name)03. QSqlDriverCreator
QSqlDriverCreator是為指定驅動類型提供SQL驅動工廠的模板類。QSqlDriverCreator實例化對象的類型T就是QSqlDriver的子類。
成員方法:
[override virtual] QSqlDriver *QSqlDriverCreator::createObject() const Reimplemented from QSqlDriverCreatorBase::createObject().04. QSqlDriverCreatorBase
QSqlDriverCreatorBase是SQL驅動工廠的基類。
重新實現createObject()以返回要提供的特定QSqlDriver子類的實例。
成員方法:
virtual ~QSqlDriverCreatorBase() virtual QSqlDriver *createObject() const = 005. QSqlDriverPlugin
QSqlDriverPlugin類提供自定義QSqlDriver插件的抽象基類。
SQL數據庫驅動插件是一個能被QT動態加載的自定義SQL數據庫驅動插件創建變得容易的簡單插件接口。
寫SQL插件可以通過派生QSqlDriverPlugin類實現,重寫純虛函數create(),使用宏Q_PLUGIN_METADATA()導出類。
成員方法:
QSqlDriverPlugin(QObject *parent = nullptr) virtual ~QSqlDriverPlugin() virtual QSqlDriver *create(const QString &key) = 006. QSqlResult
QSqlResult類提供了訪問具體SQL數據庫數據的抽象接口。
通常會使用QSqlQuery代替QSqlResult,因為QSqlQuery提供了具體數據庫的QSqlResult實現的通用包裝。
如果通過派生QSqlDriver實現自定義SQL驅動,需要提供實現了全部純虛函數和需要的虛函數的自定義的QSqlResult子類。
成員方法:
QSqlResult(const QSqlDriver *db) void addBindValue(const QVariant &val, QSql::ParamType paramType) int at() const virtual void bindValue(int index, const QVariant &val, QSql::ParamType paramType) virtual void bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType) QSql::ParamType bindValueType(int index) const QSql::ParamType bindValueType(const QString &placeholder) const QSqlResult::BindingSyntax bindingSyntax() const QVariant boundValue(int index) const QVariant boundValue(const QString &placeholder) const int boundValueCount() const QString boundValueName(int index) const QVector<QVariant> & boundValues() const void clear() virtual QVariant data(int index) = 0 const QSqlDriver * driver() const virtual bool exec() QString executedQuery() const virtual bool fetch(int index) = 0 virtual bool fetchFirst() = 0 virtual bool fetchLast() = 0 virtual bool fetchNext() virtual bool fetchPrevious() bool hasOutValues() const bool isActive() const bool isForwardOnly() const virtual bool isNull(int index) = 0 bool isSelect() const bool isValid() const QSqlError lastError() const virtual QVariant lastInsertId() const QString lastQuery() const virtual int numRowsAffected() = 0 virtual bool prepare(const QString &query) virtual QSqlRecord record() const virtual bool reset(const QString &query) = 0 void resetBindCount() virtual bool savePrepare(const QString &query) virtual void setActive(bool active) virtual void setAt(int index) virtual void setForwardOnly(bool forward) virtual void setLastError(const QSqlError &error) virtual void setQuery(const QString &query) virtual void setSelect(bool select) virtual int size() = 007. 附錄
7.1 關鍵字:How to Write Your Own Database Driver
7.2 關鍵字:How to Create Qt Plugins
總結
以上是生活随笔為你收集整理的【Qt】Qt数据库驱动层的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Qt】Qt数据库简介
- 下一篇: 【Linux系统编程】Linux文件操作