記錄:編譯Qt5.0連接MySql5.5數據庫的驅動

第一步

1、準備好Mysql數據庫安裝文件,Qt5.0完整的離線安裝包,以及Qt5.0的完整的源代碼。安裝好程序,假設Mysql的安裝路徑爲:C:\MySQL5.5,Qt5.0的安裝路徑:C:\Qt\Qt5.0.0-rc2\5.0.0-rc2,而Qt5.0的解壓路徑爲:C:\Qt\qt-5.0.1-src。

  注意事項:(1)安裝mysql數據庫的時候,網上很多教程說要選擇自定義安裝,並把lib和include這個選項選上。其實這個並不重要。因爲我機器上很久前裝mysql時選的是typical安裝的,在安裝目錄下仍然可以找到lib和include這兩個文件夾。安裝方式並不重要。(2)Qt5.0是Qt的最新版本,在網上找到的編譯方法都是基於Qt4.x的。我這裏下載的是qt-windows-opensource-5.0.0-rc2-msvc2010_32-x86-offline.exe。這個安裝包使用的是VC編譯環境。因此,接下來的編譯工作都是使用VS編譯工具來編譯的。(3)爲什麼要下載Qt5.0的源代碼(qt-everywhere-opensource-src-5.0.1.zip)?因爲我們要編譯Qt連接mysql的驅動程序,需要使用一個mysql.pro文件。這個文件就在Qt5.0源代碼中。其路徑爲(源碼包的解壓路徑):C:\Qt\qt-5.0.1-src\qtbase\src\plugins\sqldrivers\mysql。具體的使用方式,我們在後面說明。

2、準備編譯工作。選擇開始->程序->Qt5.0.0-r2->5.0.0->MSVC2010->Qt5.0.0 for desktop(MSVC2010) prompt。我們在這個環境下使用qmake來生成編譯程序的makefile文件。爲什麼要使用這個環境?因爲,這個命令提示符已經爲我們設置好了Qt庫的環境,也即可以直接使用Qt庫相關的工具。

第二步

(1)切換工作目錄到:C:\Qt\qt-5.0.1-src\qtbase\src\plugins\sqldrivers\mysql。可以看到如下的幾個文件存在:

   

 

 

其中,mysql.pro就是所要的文件。所以的編譯工作都是從這個文件開始。

(2)使用qmake生成makefile自動編譯。注意大小寫不能錯。其中,include和Lib就是上面說的Mysql安裝目錄下的兩個文件夾。如下圖所示:

      

 

 

 

 

 

(3)如果一切順利,將在當前目錄生成幾個makefile文件和兩個文件夾。如下圖:

     

 

 

 

 

 

 

(4)接下來是重要的一部。如果我們直接在當前窗口輸入make進行編譯工作,那麼很可能會出錯,如:

    更改數不勝數。這個時候,我們可以換另外一種方法,用VS2010的命令行環境來進行編譯工作,在開始菜單中選擇vs2010的一個命令行環境,切換到當前的工作目錄下,執行nmake命令:

        

 

 

 

 

 

 

 

 

 

 

 

 

 

     果然,出錯了!錯誤顯示缺少某個頭文件。實際上,我們去mysql的安裝目錄include文件夾下查看,明顯是可以找到這樣一個頭文件的。那麼,怎麼辦呢?可以在命令行中用/I指示搜索路徑。但是我們還是用最笨最簡單的方法。直接將mysql安裝目錄下的include文件夾拷貝到Qt5.0的安裝路徑下。按照出錯的提示,具體路徑爲:C:\Qt\Qt5.0.0-rc2\5.0.0-rc2\msvc2010\include\QtSql。(這裏注意,不是Qt5.0源碼的路徑哦,而是Qt5.0的安裝路徑。)如果一切順利,我們就會得到幾個lib文件和dll文件。文件位於:C:\Qt\qt-5.0.1-src\qtbase\plugins\sqldrivers。這個文件夾下的文件都是編譯生成的新文件。我們將該目錄下的qsqlmysql.dll和qsqlmysqld.dll拷貝到C:\Qt\Qt5.0.0-rc2\5.0.0-rc2\msvc2010\plugins\sqldrivers目錄下即可。配置工作至此完成。

第三步

    連接。使用qt creator新建一個qt console項目,示例代碼如下:

複製代碼
 1 #include <QCoreApplication>
 2 #include <QtSql/QSqlDatabase>
 3 #include <QtSql/QSqlQuery>
 4 #include <QDebug>
 5 
 6 int main(int argc, char *argv[])
 7 {
 8     QCoreApplication a(argc, argv);
 9 
10     QSqlDatabase con = QSqlDatabase::addDatabase("QMYSQL");
11     con.setHostName("localhost");
12     con.setDatabaseName("kxdl");
13     con.setPort(3306);
14     con.setUserName("root");
15     con.setPassword("root");
16     bool ret = con.open();
17     if(ret)
18     {
19         qDebug()<<"true"<<endl;
20         ret = false;
21         QSqlQuery qsql(con);
22         ret = qsql.exec("SELECT * FROM userInfo COUNT(*)");
23         if(ret = true)
24         {
25             qDebug()<<"true"<<endl;
26         }
27         else
28         {
29             qDebug()<<"false"<<endl;
30         }
31     }
32     return a.exec();
33 }
複製代碼

     輸出結果:

    至此,編譯工作自此成功結束。

 

轉載自:http://www.cnblogs.com/csuftzzk/archive/2013/05/04/3060212.html
發佈了2 篇原創文章 · 獲贊 5 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章