QT資料庫外掛程式 Qkingbase

2021-07-27 06:57:13 字數 2220 閱讀 4612



**:qkingbase原理:

在qt中,qtsql模組提供了與平台以及資料庫種類無關的訪問sql資料庫的介面。qsqldatabase物件表徵了與資料庫的關聯。qt使用驅動程式與各種資料庫的應用程式設計介面進行通訊。

由於授權許可的限制,qt無法提供所有的驅動程式,這個時候就需要以外掛程式的形式來建立驅動程式了。

外掛程式就是乙個動態庫,它的本質在於不修改程式主體(平台)的情況下對軟體功能進行擴充套件與加強,當外掛程式需要的介面公開後,任何公司或個人都可以製作自己的外掛程式來解決一些操作上的不便或增加新的功能,也就是實現真正意義上的「即插即用」軟體開發。平台+外掛程式軟體結構是將乙個待開發的目標軟體分為兩部分,一部分為程式的主體或主框架,可定義為平台,另一部分為功能擴充套件或補充模組,可定義為外掛程式。kingbase的驅動程式就是作為外掛程式來實現對qt功能的擴充套件的。

qkingbase的實現核心在於繼承了qt中的兩個介面類,或者說是qt中專門提供了這兩個介面類以利於功能的擴充套件。

qkingbasedriver : public qsqldriver;

qkingbaseresult : public qsqlresult;

介面類的特點是主要子函式都是虛函式,這一點保證了我們可以在它的子類中盡情發揮。kingbase提供的外掛程式對於和資料庫特性有關的操作都在繼承於qt介面類的子類中進行了實現,通過這種多型的方式完成了qt對於kingbase資料庫的訪問和處理等操作。

附qt開發中操作kingbase資料庫的流程:

1、工程pro檔案中新增

qt += sql 

2、引入標頭檔案

#include

#include

#include

#include 3、

通常情況下,是在應用程式中呼叫乙個單獨函式來建立資料庫連線。例如:

qsqldatabase db = qsqldatabase::adddatabase("qpsql");

db.sethostname("acidalia");

db.setdatabasename("customdb");

db.setusername("mojito");

db.setpassword("j0a1m8");

db.open();

這裡首先呼叫qsqldatabase::adddatabase()來建立qsqldatabase物件。adddatabase()的第乙個引數指定了qt必須使用哪乙個資料庫驅動程式來訪問這個資料庫。接下來要和選定的資料庫進行連線, 通過設定主機名,資料庫名,使用者名稱及密碼來連線資料庫。kingbase也支援通過服務名來和資料庫進行連線,當沒有設定主機名的時候,db.setdatabasename()設定的其實就是服務名,行為和dci或者occi一致,這裡注意正確配置好服務名以及設定好環境變數。

一旦連線建立,就可以使用qsqlquery執行底層資料庫支援的任何sql語句了。

例如。以下是如何執行select語句的**:

qsqlquery query;

query.exec("select * from student");

在exec()呼叫之後,可以便利查詢的結果集:

while ( query.next() )  }

只要呼叫next()一次,就可以把這個qsqlquery定位到結果集中的第一行記錄。隨後的next()呼叫,每次都會把記錄指標前移一條記錄,直到到達結尾時才返回false。如果結果集為空(或查詢失敗),那麼next的第一次呼叫就返回false。 value()把獲得的字段值作為qvariant返回。qvariant 作為乙個資料型別的聯合,儲存在資料庫中的不同型別的資料都可以對映為相應的c++和qt型別儲存在qvariant中。

此外,插入資料除了query.exec("insert into student values( 2,

』jincang』)");這種方式外,也可以採用以下方法:對於需要一次插入多條記錄或者避免將數值轉換為字串的插入需求,可以使用prepare()來指定乙個包含佔位符的語句,然後繫結要插入的數值。

query.prepare("insert into student values(?,?)");

ids <

names<

query.addbindvalue(ids);

query.addbindvalue(names);

if(!query.execbatch())

qt靜態編譯時無法載入資料庫外掛程式

在動態編譯qt程式時,當把程式拷貝到目標機器上時,如果想要使資料庫可以執行,必須在程式的同級目錄下建立plugins qsqldrivers 資料夾,然後把資料庫外掛程式放進去。但是當靜態編譯時,這一招就不管用了,可看見靜態庫下面的qsqldrivers裡面沒有dll檔案,無法被動態載入。解決這個問...

QT資料庫 新增MySQL驅動外掛程式(ARM篇)

編譯環境 ubuntu 11.04 qt4.7.2 gcc4.3.2 硬體 arm9 s3c2440 2.解壓縮 tar zxvf mysql 5.1.70.tar.gz 3.在 原創 qt資料庫 新增mysql驅動外掛程式 linux篇 裡我已經介紹過了。需要ncurses,所以我們還移植到arm...

Qt資料庫程式設計

qtsql模組提供了乙個平台無關且資料庫無關的訪問sql資料庫的介面。qt中的每個資料庫連線用乙個qsqldatabase物件來表示 qt使用不同driver來和各種不同資料庫的api進行通訊。qsqlquery提供了直接執行任意sql語句的特性 此外還提供了兩個高層次的無需sql命令的資料庫介面 ...