看到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();
}