編譯MySQL驅動 與 Qt 連接 MySQL

0     假設你已經編譯安裝好了Qt開發環境並可正常使用(假設用的是VS2008+ QtVisualStudioIntegrationv1.43for.VS.2003.2005)一切操作均在windows下進行。

1           安裝MySQL

下載MySQL安裝程序,安裝時選擇Custom方式,選擇安裝目錄,目錄最好不要有空格,不要有中文,選擇安裝includelib文件。其它的就沒什麼了。Sqlyog是一個MySQL的圖形界面管理工具,可以安裝上,方便數據庫操作。

2           將安裝好的MySQL目錄下的include文件夾裏的文件(頭文件)複製到編譯工具的include文件夾下,再將MySQL目錄下的lib/opt裏的文件複製到編譯工具的lib文件夾下,簡而言之就是要讓編譯器能找到MySQL裏相應的文件。(該路徑也可在生成工程文件時添加給qmake)比如:

../src/plugins/sqldrivers/mysql>qmake "INCLUDEPATH+=D:/MySQL/include" "LIBS+=D:/MySQL/lib/opt/libmysql.lib"

 

3       打開VS2008 命令提示符,將目錄切換到Qt/src/plugins/sqldrivers/mysql/,運行qmake

完了在運行nmake。不出錯的話MySQL的驅動就編好了。用如下代碼進行驅動測試:(這段程序編譯完之後不是運行,是調試,不然測試信息出不來)

#include <QSqlDatabase>

#include <QSqlQuery>

#include <QSqlError>

#include <QApplication>

#include <QSqlDatabase>

#include <QStringList>

#include <QMessageBox>

#include <QDebug>

 

int main(int argc, char* argv[])

{   

         QApplication app(argc, argv);

         qDebug() << "Available drivers:";

         QStringList drivers = QSqlDatabase::drivers();

         foreach(QString driver, drivers)     

                   qDebug() << "/t" << driver;

         QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

         qDebug() << "MYSQL driver valid?" << db.isValid();

}

測試結果如下圖:

 

 

4           MySQL裏創建庫,創建庫時數據庫字符集選擇gbk編碼,創建數據庫名爲test,單表,表名爲testTable,表內屬性爲name  varchar ;(方便理解代碼)

5       用如下代碼測試連接數據庫並測試寫入、讀出數據是否成功,並測試數據是否亂碼。

#include <QtGui>

#include <QtSql>

#include <QTableView>

#include <QString>

#include <QObject>

 

int main(int argc, char **argv)

{

         QApplication app(argc, argv);

         QTextCodec::setCodecForTr(QTextCodec::codecForName("gbk")); //設置tr()編碼。

         QSqlQueryModel *model;

         QTableView *table=new QTableView;

 

         QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");

         db.setHostName("localhost");   //數據庫服務器

         db.setDatabaseName("test");   //數據庫名

         db.setUserName("root");      //登錄名

         db.setPassword("123456");    //密碼

 

         if(db.open())

         {

                   QMessageBox::information(0,QObject::tr("信息"),

QObject::tr("數據庫連接成功"));

                   QSqlQuery query;

                   query.exec(QObject::tr("INSERT INTO bbb VALUES ('柯南')"));

query.exec("SELECT name FROM testTable");//name爲屬性名;

                                                                                             //testTable爲表名

                   model=new QSqlQueryModel;

                   model->setQuery(query);

                   model->setHeaderData(0, Qt::Horizontal, QObject::tr("姓名"));

                   table->setModel(model);

                   table->show();

         }

         else

         {

                   // 數據庫打開失敗,顯示數據庫返回的失敗信息

                   QMessageBox::critical(0,QObject::tr("出錯"),db.lastError().text());

         }

         QApplication::connect(&app, SIGNAL(lastWindowClose()), &app, SLOT(quit()));

         return app.exec();

}

運行結果如下圖:

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