十四、Qt數據庫 簡介 添加MySQL數據庫驅動插件

 

(1)簡介

從今天開始我們學習Qt數據庫編程的內容。

先說明:我們以後使用現在最新的基於Qt 4.6.2的Qt Creator 1.3.1 Windows版本,該版本是2010年2月17日發佈的。

數據庫幾乎是每個較大的軟件所必須應用的,而在Qt中也使用QtSql模塊實現了對數據庫的完美支持。我們在Qt Creator的幫助中查找QtSql Module,其內容如下圖:

可以看到這個模塊是一組類的集合,使用這個模塊我們需要加入頭文件#include <QtSql>,而在工程文件中需要加入一行代碼:QT += sql

這裏每個類的作用在後面都有簡單的介紹,你也可以進入其中查看其詳細內容。下面我們先簡單的說一下QSqlDatabase類和QSqlQuery類。

QSqlDatabase類實現了數據庫連接的操作,現在Qt支持的數據庫類型有如下幾種:

而現在我們使用的免費的Qt只提供了SQLite和ODBC數據庫的驅動(我們可以在Qt Creator安裝目錄下的qt/plugins/sqldrivers文件夾下查看),而其他數據庫的驅動需要我們自己添加。SQLite是一個小巧的嵌入式數據庫,關於它的介紹你可以自己在網上查找。

QSqlQuery類用來執行SQL語句。(關於SQL語句:在我的教程中只會出現很簡單的SQL語句,你沒有相關知識也可以看懂,但是如果想進行深入學習,就需要自己學習相關知識了。)

下面我們就先利用這兩個類來實現最簡單的數據庫程序,其他的類我們會在以後的教程中逐個學習到。

1.新建Qt控制檯工程。

2.選擇上QtSql模塊,這樣就會自動往工程文件中添加QT += sql 這行代碼了。

3.修改main.cpp中的內容如下。

#include <QtCore/QCoreApplication>
#include <QtSql>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); //添加數據庫驅動
    db.setDatabaseName(":memory:"); //數據庫連接命名
    if(!db.open()) //打開數據庫
    {
        return false;
    }

    QSqlQuery query; //以下執行相關QSL語句
    query.exec("create table student(id int primary key,name varchar)");
    //新建student表,id設置爲主鍵,還有一個name項
    query.exec("insert into student values(1,'xiaogang')");
    query.exec("insert into student values(2,'xiaoming')");
    query.exec("insert into student values(3,'xiaohong')");
    
//向表中插入3條記錄

    query.exec("select id,name from student where id >= 2");
    //查找表中id >=2 的記錄的id項和name項的值
    while(query.next())       //query.next()指向查找到的第一條記錄,然後每次後移一條記錄
    {
        int ele0 = query.value(0).toInt();        //query.value(0)是id的值,將其轉換爲int型
        QString ele1 =query.value(1).toString();
        qDebug() << ele0 <<ele1 ;       //輸出兩個值
    }
    
    return a.exec();
}

我們使用了SQLite數據庫,連接名爲“:memory:”表示這是建立在內存中的數據庫,也就是說該數據庫只在程序運行期間有效。如果需要保存該數據庫文件,我們可以將它更改爲實際的文件路徑。

4.最終效果如下。

5.我們可以將主函數更改如下。

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug() << "Available drivers:";
    QStringList drivers = QSqlDatabase::drivers();
    foreach(QString driver, drivers)
    qDebug() << "/t" << driver;

    return a.exec();
}

這樣運行程序就可以顯示現在所有能用的數據庫驅動了。

可以看到現在可用的數據庫驅動只有三個。

 

 

 

(2)添加MySQL數據庫驅動插件

 

 

在上一節的末尾我們已經看到,現在可用的數據庫驅動只有3種,那麼怎樣使用其他的數據庫呢?在Qt中,我們需要自己編譯其他數據庫驅動的代碼,讓它們以插件的形式來使用。下面我們就以現在比較流行的MySQL數據庫爲例,說明一下怎樣在Qt Creator中添加數據庫驅動插件。

在講述之前,我們先看一下Qt Creator中數據庫的插件到底放在哪裏。

我們進入Qt Creator的安裝目錄,然後進入相對應的文件夾下,比方我這裏是

D:/Qt/2010.02.1/qt/plugins/sqldrivers

在這裏我們可以看見幾個文件,如下圖:

根據名字中的關鍵字,我們可以判斷出這就是ODBC數據庫和SQLite數據庫的驅動插件。下面我們編譯好MySQL數據庫驅動後,也會在這裏出現相對應的文件。

首先:我們查看怎樣安裝數據庫插件。

我們打開Qt Creator,在幫助中搜索SQL Database Drivers關鍵字。這裏列出了編譯Qt支持的所有數據庫的驅動的方法。

我們下拉到在windows上編譯QMYSQL數據庫插件的部分,其內容如下:

這裏詳細介紹了整個編譯的過程,其可以分爲以下幾步:

第一,下載MySQL的安裝程序,在安裝時選擇定製安裝,這時選中安裝Libs和Include文件。安裝位置可以是C:/MySQL 。

注意:安裝位置不建議改動,因爲下面進行編譯的命令中使用了安裝路徑,如果改動,那麼下面也要進行相應改動。

第二,進行編譯。我們按照實際情況輸入的命令如下。

cd %QTDIR%/src/plugins/sqldrivers/mysql

qmake "INCLUDEPATH+=C:/MySQL/include" "LIBS+=C:/MySQL/lib/opt/libmysql.lib" mysql.pro

mingw32-make

注意:在上面的命令中qmake之後如果加上“-o Makefile”選項,那麼這個插件只能在以release模式編譯程序時才能使用,所以我們上面沒有加這個選項。

然後:我們按照上面的過程進行相應操作。

1.我們先下載MySQL的安裝文件。

我們可以到MySQL的官方主頁 http://www.mysql.com 進行下載最新的MySQL的windows版本,現在具體的下載頁面地址爲:

http://www.mysql.com/downloads/mirror.php?id=383405#mirrors

我們不進行註冊,直接點擊其下面的

No thanks, just take me to the downloads!

可以在其中選擇一個鏡像網點進行下載,我使用的是Asia下的最後一個,就是臺灣的鏡像網點下載的。

下載到的文件名爲:mysql-essential-5.1.44-win32 ,其中的win32表明是32位的windows系統,這一點一定要注意。文件大小爲40M左右。

當然你也可以到中文網站上進行下載:http://www.mysql.cn/,隨便下一個windows的版本就行。

2.安裝軟件。

我們選擇定製安裝Custom。

然後選中安裝Include文件和Lib文件。

我們將安裝路徑更改爲:C:/MySQL 。

最終的界面如下。

安裝完成後,我們不進行任何操作,所以將兩個選項都取消。

3.進行編譯。

我們在桌面上開始菜單中找到Qt Creator的菜單,然後打開Qt Command Prompt。

然後輸入第一條命令cd %QTDIR%/src/plugins/sqldrivers/mysql 後按回車,運行效果如下。

然後輸入第二條命令:

qmake "INCLUDEPATH+=C:/MySQL/include" "LIBS+=C:/MySQL/lib/opt/libmysql.lib" mysql.pro

按回車後運行效果如下:

最後輸入:mingw32-make ,按下回車後經過幾秒的編譯,最終效果如下:

整個編譯過程中都沒有出現錯誤提示,可以肯定插件已經編譯完成了。

4.我們再次進入Qt Creator安裝目錄下存放數據庫驅動插件的文件夾。

我這裏是D:/Qt/2010.02.1/qt/plugins/sqldrivers

其內容如下:

可以看到已經有了和MySQL相關的文件了。

 

最後:我們編寫程序測試插件。

1.我們將上一次的主函數更改如下。

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); //添加數據庫驅動

    return a.exec();
}

運行程序,效果如下。

這裏提示:QSqlDatabase: QMYSQL driver not loaded 。

2.這時我們需要將C:/MySQL/bin目錄下的libmySQL.dll文件複製到我們Qt Creator安裝目錄下的qt/bin目錄中。

如下圖:

3.這時再運行程序,就沒有提示了。

4.我們再將主函數更改一下,測試這時可用的數據庫驅動。

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    qDebug() << "Available drivers:";
    QStringList drivers = QSqlDatabase::drivers();
    foreach(QString driver, drivers)
    qDebug() << "/t" << driver;

    return a.exec();
}

運行效果如下:

可以看到,現在已經有了MySQL的數據庫驅動了。

我們這裏只介紹了MySQL驅動插件在windows下的編譯方法,其他數據庫和其他平臺的編譯方法可以按照幫助中的說明進行,我們不再介紹。其實Qt不僅可以編譯現成的數據庫驅動插件,我們也可以編寫自己的數據庫驅動插件,當然這是一件相當複雜的事情,我們這裏也就不再進行介紹。

關於MySQL的使用,我們的教程裏現在不再涉及,在http://dev.mysql.com/doc/refman/5.1/zh/index.html 這裏有MySQL的中文參考手冊,你可以進行參考。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章