日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

【Qt】Qt数据库驱动层

發(fā)布時(shí)間:2024/4/24 数据库 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Qt】Qt数据库驱动层 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

00. 目錄

文章目錄

    • 00. 目錄
    • 01. Qt驅(qū)動(dòng)層
    • 02. QSqlDriver
    • 03. QSqlDriverCreator
    • 04. QSqlDriverCreatorBase
    • 05. QSqlDriverPlugin
    • 06. QSqlResult
    • 07. 附錄

01. Qt驅(qū)動(dòng)層

驅(qū)動(dòng)層為具體的數(shù)據(jù)庫和SQL接口層之間提供了底層的橋梁,主要類包括QSqlDriver、QSqlDriverCreator、QSqlDriverCreatorBase、QSqlDriverPlugin和QSqlResult。

02. QSqlDriver

QSqlDriver是訪問具體SQL數(shù)據(jù)庫的抽象基類,不能直接使用。如果要?jiǎng)?chuàng)建自定義的數(shù)據(jù)庫驅(qū)動(dòng),可以根據(jù)需要重寫QSqlDriver類的純虛函數(shù)和虛函數(shù)。

該類不能直接使用,如果要使用使用QSqlDatabase代替。

QSqlDatabase負(fù)責(zé)加載和管理數(shù)據(jù)庫驅(qū)動(dòng)插件。當(dāng)某個(gè)數(shù)據(jù)庫添加時(shí),相應(yīng)的數(shù)據(jù)庫驅(qū)動(dòng)插件會(huì)被加載。QSqlDatabase依靠驅(qū)動(dòng)插件為QSqlDriver和QSqlResult提供接口。

QSqlDriver是定義了SQL數(shù)據(jù)庫功能的抽象基類。

公有成員方法

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是為指定驅(qū)動(dòng)類型提供SQL驅(qū)動(dòng)工廠的模板類。QSqlDriverCreator實(shí)例化對象的類型T就是QSqlDriver的子類。

成員方法:

[override virtual] QSqlDriver *QSqlDriverCreator::createObject() const Reimplemented from QSqlDriverCreatorBase::createObject().

04. QSqlDriverCreatorBase

QSqlDriverCreatorBase是SQL驅(qū)動(dòng)工廠的基類。

重新實(shí)現(xiàn)createObject()以返回要提供的特定QSqlDriver子類的實(shí)例。

成員方法:

virtual ~QSqlDriverCreatorBase() virtual QSqlDriver *createObject() const = 0

05. QSqlDriverPlugin

QSqlDriverPlugin類提供自定義QSqlDriver插件的抽象基類。

SQL數(shù)據(jù)庫驅(qū)動(dòng)插件是一個(gè)能被QT動(dòng)態(tài)加載的自定義SQL數(shù)據(jù)庫驅(qū)動(dòng)插件創(chuàng)建變得容易的簡單插件接口。

寫SQL插件可以通過派生QSqlDriverPlugin類實(shí)現(xiàn),重寫純虛函數(shù)create(),使用宏Q_PLUGIN_METADATA()導(dǎo)出類。

成員方法:

QSqlDriverPlugin(QObject *parent = nullptr) virtual ~QSqlDriverPlugin() virtual QSqlDriver *create(const QString &key) = 0

06. QSqlResult

QSqlResult類提供了訪問具體SQL數(shù)據(jù)庫數(shù)據(jù)的抽象接口。

通常會(huì)使用QSqlQuery代替QSqlResult,因?yàn)镼SqlQuery提供了具體數(shù)據(jù)庫的QSqlResult實(shí)現(xiàn)的通用包裝。

如果通過派生QSqlDriver實(shí)現(xiàn)自定義SQL驅(qū)動(dòng),需要提供實(shí)現(xiàn)了全部純虛函數(shù)和需要的虛函數(shù)的自定義的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() = 0

07. 附錄

7.1 關(guān)鍵字:How to Write Your Own Database Driver

7.2 關(guān)鍵字:How to Create Qt Plugins

總結(jié)

以上是生活随笔為你收集整理的【Qt】Qt数据库驱动层的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。