QT編譯Mysql數據庫驅動

看到mysql的客服端,想着用QT做出個大概模型出來,首先的問題就是QT下的mysql驅動需要自己去編譯,一直想着在QT上編譯Mysql驅動,但是一直沒實行或者遇到一點小問題又終止了。下午剛好對QT又有了較大的興趣,所以下定決心要搞定這一個。

最開始還是失敗,不過沒有遇到以前編譯的種種錯誤,所需的.a和.dll都編譯出來了,但是就是沒有加載成功mysql driver。什麼錯誤都沒有,只能從環境和版本上找問題了,我裝的QT是SDK版本,裏面集成的是QT4.7,QTcreate又是2.5的版本,因爲在編譯完mysql後沒有debug和release目錄,所以不再糾結這問題,果斷換了個版本。

這次安裝OK了,QT版本也不是SDK的,還是一步一步來的好。QT爲4.8.1,QTcreate爲2.4.1(下載:http://pan.baidu.com/s/1725OU),mysql版本爲5.6.10(下載:http://pan.baidu.com/s/1o6yW8Z4)。廢話不多說,記下操作步驟,以待後用。

首先下載MYSQL安裝,安裝路徑最好自己改成  C:\MySQL\,其他一路next。或者下載一個只有include和lib的就行。總之路徑中不能有空格,不然QT會編譯不過。MySQL裝好後用CMD命令進去MySQL目錄下的bin文件夾下分別運行mysqld.exe這個是服務器、mysql.exe -uroot -p 這個客服端默認沒有密碼,創建一個mydata的數據庫(怎麼創建應該不用說了)。然後就是在QT上操作的了。

1.進入QT安裝目錄的數據庫源碼目錄(這裏是裝在C盤):C:\Qt\4.8.1\src\plugins\sqldrivers\mysql 打開目錄下的mysql.pro文件在末尾加上這兩句

INCLUDEPATH += D:/MySQL/include/
LIBS+= -LD:/MySQL/lib/ -llibmysql        再次強調:目錄不能有空格。

2.用錘子來構建項目,不要運行或者調試登錄不進的,你可以試試。QT默認是用debug來創建的,在mysql下有的mysql-build-desktop- 文件夾,

文件夾下有debug和release兩個文件夾,分別用debug和release模式下用錘子構建一次,在debug目錄下有libqsqlmysqld4.a和qsqlmysqld4.dll

在release目錄下有libqsqlmysql4.a和qsqlmysql4.dll。將這四個文件拷貝到 C:\Qt\4.8.1\plugins\sqldrivers。這樣QT的驅動編譯就OK了。

3.最後一步還需要加載MySQL驅動,將安裝MySQL目錄下lib中的libmysql.dll文件拷貝到C:\Qt\4.8.1\bin 中就OK了。

按着這個步驟就成功了,是不是很簡單,但是要自己實踐成功後纔會覺得這真的是很簡單。


網絡的時代是強大的,各種網絡資源搜索終於解決了這個問題。


下面是測試代碼。

#include <QCoreApplication>
#include <QSqlDatabase>
#include <QDebug>
#include <QStringList>
#include <QSqlQuery>

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

    // 輸出可用數據庫
    qDebug() << "Available drivers:";
    QStringList drivers = QSqlDatabase::drivers();
    foreach(QString driver, drivers)
        qDebug() << driver;

    // 打開MySQL
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setHostName("localhost");
    db.setDatabaseName("mydata");
    db.setUserName("root");
    db.setPassword("");
    if (!db.open())
        qDebug() << "Failed to connect to root mysql admin";
    else qDebug() << "open";

    QSqlQuery query(db);

    //注意這裏varchar一定要指定長度,不然會出錯
    query.exec("create table student(id int primary key,name varchar(20))");

    query.exec("insert into student values(1,'xiaogang')");
    query.exec("insert into student values(2,'xiaoming')");
    query.exec("insert into student values(3,'xiaohong')");

    query.exec("select id,name from student where id >= 2");

    while(query.next())
    {
        int value0 = query.value(0).toInt();
        QString value1 = query.value(1).toString();
        qDebug() << value0 << value1 ;
    }

    return a.exec();
}


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