自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Qt 4 訪問 Mysql 數(shù)據(jù)庫實例

移動開發(fā)
本文介紹的是Qt 4 訪問 Mysql 數(shù)據(jù)庫實例,使用 Qt 來連接 mysql 是非常簡單的事情, 當然 Qt 還提供了一些數(shù)據(jù)庫相關的 widget 來更好的顯示,更新數(shù)據(jù)。

Qt 4 訪問 Mysql 數(shù)據(jù)庫實例是本文要介紹的內(nèi)容,Qt 4.1.2   windows 開源版, mySql 5.0.21 也是windows 開源版。不過這2個軟件都是跨平臺的,方法大同小異。

一、配置windows下開發(fā)環(huán)境。

1. Qt 的安裝 這個很簡單, 去 trolltech 網(wǎng)站自己下載一個 windows 開源版的就好了。然后雙擊安裝, 一路next, 如果問是否需要安裝 MinGW, 點是, 然后next下去, 就完成了。
2. MySQL 的安裝 我不喜歡安裝東西, 所以去 www.mysql.com 下了個非安裝版, 直接放到C盤下了。至此,安裝環(huán)境完成。

二、解決 mysql 的 Qt 驅(qū)動問題 這個問題困擾了我一些時間,因為 Qt 安裝完后,沒有帶 mySQL 的驅(qū)動,寫好的程序運行會提示說 “Driver not loaded”。不過還好, 在 src 目錄下可以找到 mysql qt 驅(qū)動的源代碼。 后來我用 Qt assistant 上說的方法,但始終無法生成庫文件,總有鏈接錯誤。 后來google 一下,在 qtcn 上看到他們站長發(fā)的一篇文章,才知道是 mysql 默認帶的庫文件是 ms 格式的, 所以使用 make 的話,ld 程序鏈接時會失敗。

如果大家使用linux系統(tǒng),那么就只需按 assistant 說的就夠了,下面 XChinux 也提到了。解決的辦法他也給出了。轉(zhuǎn)錄如下:以下引用引自:

http://www.qtcn.org/bbs/read.php?tid=4210&fpage=&toread=&page=1

作者:XChinux QUOTE: Qt4 OpenSource for mingw中編譯MySQL驅(qū)動 mingw-utils 包下載:

http://www.qtcn.org/download/mingw-utils-0.3.tar.gz

在 Qt4 的文檔中在Windows下關于怎樣編譯 mysql 的驅(qū)動上面說

  1. You need to get the MySQL installation files. Run SETUP.EXE and choose "Custom Install".  
  2.  Install the "Libs & Include Files" Module. Build the plugin as follows (here it is assumed that MySQL is installed in C:\MYSQL):  
  3.  cd %QTDIR%\src\plugins\sqldrivers\mysql qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.LIB"  
  4.  mysql.pro nmake If you are not using a Microsoft compiler, replace nmake with make in the line above.  

這就是一個容易搞混的地方,上面是使用的 libmysql.lib和nmake來編譯的,如果使用的是msvc的編譯器,那上面是沒問題的,但是如果使用的是mingw編譯器,那就會出錯,有 undefined reference....等類錯誤字樣。這是因為mingw使用的庫和msvc使用的不同格式的庫而引起的。而mysql只提供了msvc可使用的庫。

qt4 for mingw要想編譯出qsqlmysql庫來,我們先得編譯出mingw需要的libmysql.a這個文件來,可使用mingw工具來生成。 mingw -utils包里的reimp命令(如果沒有這個命令的話,可從本帖開頭處給出的地址中下載這個文件,并把它解壓開后的bin目錄里的內(nèi)容拷貝到 mingw的bin目錄下面。mysql安裝的時候默認的安裝路徑中有空格,我們得先把它的include和lib目錄拷貝到?jīng)]有空格的路徑下,比如C: \mysql下)

  1. cd c:\mysql\lib\opt reimp -d libmysql.lib   
  2. dlltool -k -d libmysql.def -l libmysql.a  

如此,這樣我們的命令行為(注意qmake和make):

  1. cd %QTDIR%\src\plugins\sqldrivers\mysql   
  2. qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.a" mysql.pro   
  3. mingw32-make  

這下便會在%QTDIR%\plugins\sqldrivers目錄下面生成libqsqlmysql.a, qsqlmysql.dll這兩個文件了。 有一點, 就是下載他給出的mingw-utils-0.3.tar.gz 文件, 只需要把里面的 reimp 工具復制到你的 minGW目錄下的bin 里就可以了,這樣按上面的步驟就可以生成需要的驅(qū)動了。

make 結(jié)束后, 庫文件會生成到qt的系統(tǒng)目錄中去。

三、簡單配置 mysql

1. 運行 mysql 服務(假定 mysql 安裝在 C:\mysql 下) 打開一個控制臺窗口, 就是“DOS”窗口,

  1. cd c:\mysql\bin mysqld  

正常情況下, 什么提示都沒有, 當然你不放心的話, 去C:\mysql\data 找擴展名是err 的文件看一下, 所有的日志都在里面。另外,建議把 C:\mysql\bin 加入系統(tǒng)的PATH中, 這樣就可以在任何目錄下運行mysql了, 以下默認是加到 PATH中的,大家可以通過在我的電腦點擊右鍵, 選擇“屬性”,然后點“高級”標簽頁,點“環(huán)境變量”按鈕, 進去找到 PATH的變量,加上";c:\mysql\data\"。

2. 測試客戶端鏈接 再開一個“DOS”窗口, 輸入: mysql -u root 來訪問 mysql 服務, 這個非安裝版, 默認含有 root 用戶, 也就是mysql 里的最高用戶, 什么都可以做。同時默認 root 用戶沒有密碼。 當然你可以登錄后使用 SET PASSWORD= PASSWORD("密碼") 來設置自己的密碼。 登錄后, 就進入 mysql 環(huán)境, 提示符也成了 mysql>

3. 為我們的測試程序新建一些數(shù)據(jù)

3.1 創(chuàng)建一個數(shù)據(jù)庫 mysql> create database example; Query OK, 1 row affected (0.03 sec) mysql> use example; Database changed 這樣就創(chuàng)建了一個叫 example 的數(shù)據(jù)庫,我們后面就使用這個庫來做試驗。

3.2 創(chuàng)建一個可以完全控制這個數(shù)據(jù)庫的用戶 mysql> GRANT all -> ON example.* -> TO test@localhost; Query OK, 0 rows affected (0.00 sec) 通過上面的語句, 系統(tǒng)會自動更新系統(tǒng)的用戶表,新建一個叫做 test 的用戶, 這個用戶只可以通過本機來訪問數(shù)據(jù)庫,至于網(wǎng)絡訪問權限, 我沒有測試, 但是應該也是大同小異,改@后面就可以了。注意, 這個新創(chuàng)建的用戶是沒有密碼的, root 可以給他設置密碼,還是使用 grant 命令操作,不過我是后面用 test 登錄后自己設置的(用上面說過 set password 的方法)。test 這個用戶被賦予了 example 數(shù)據(jù)庫的完全權限。

3.3 用 test帳號登錄 mysql -u test -p password 或者輸入完-p后直接回車, 程序會讓你輸入密碼。

#p#

3.4 新建一個表

  1. mysql> CREATE TABLE employee (  
  2.      id CHAR(3),  
  3.      lastname VARCHAR(30),  
  4.      firstname VARCHAR(20),  
  5.      dob DATETIME,  
  6.      phone VARCHAR(10)  
  7.      );  
  8. Query OK, 0 rows affected (0.00 sec) 

這樣就新建了一個叫做 employee 的表,含有 4 個字段, id 號, 姓, 名,生日, 電話。 我們?nèi)缓蟛迦?條記錄:

  1. mysql> INSERT INTO employee VALUES ("001", "熱", "X", "2000-05-18", "5188");  
  2. Query OK, 1 row affected (0.05 sec)  
  3. mysql> INSERT INTO employee VALUES ("002", "包", "子", "2000-05-18", "5198")  
  4. Query OK, 1 row affected (0.00 sec) 

那么, 現(xiàn)在我們就準備好了所有數(shù)據(jù)了。

四、 Qt 4 的一個簡單訪問 mysql 的例子

1 Qt 連接 mysql 實例講解 下面的例子非常的簡單, 使用了 QTextEdit 來顯示查詢到的內(nèi)容,主要是要說明Qt 4 中如何連接和訪問數(shù)據(jù)庫。至于用什么顯示, 不是現(xiàn)在我們關心的問題。:)

  1. #include <QApplication> 
  2. #include <QTextEdit> 
  3. #include <QString> 
  4. #include <QSqlDatabase> 
  5. #include <QSqlQuery> 
  6. #include <QSqlError> 
  7. #include <QSqlDriver> 
  8. #include <QDateTime> 
  9. #include <QDebug> 
  10.  
  11. int main(int argc, char **argv)...{  
  12. QApplication app(argc, argv);  
  13. QTextEdit display; display.resize(400, 160);  
  14. display.show(); // 下面進行數(shù)據(jù)庫的設置  
  15. QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql數(shù)據(jù)庫驅(qū)動   
  16. db.setHostName("localhost");  
  17. db.setDatabaseName("example"); // 我們之前建立的數(shù)據(jù)庫  
  18. db.setUserName("test"); // 我們創(chuàng)建的 yunfan 用戶名  
  19. db.setPassword("test"); // yunfan 用戶的密碼  
  20. bool ok = db.open(); // 嘗試連接數(shù)據(jù)庫  
  21. if(ok)...{ // 這里用yunfan已經(jīng)成功連上數(shù)據(jù)庫  
  22. QSqlQuery query; // 新建一個查詢的實例  
  23. if(query.exec("select * from employee"))...{ // 嘗試列出 employee 表的所有記錄  
  24. // 本次查詢成功  
  25. int numRows = 0; // 詢問數(shù)據(jù)庫驅(qū)動,是否驅(qū)動含有某種特性   
  26. if(db.driver()->hasFeature(QSqlDriver::QuerySize))...{  
  27. numRows = query.size(); // 如果支持結(jié)果影響的行數(shù),那么直接記錄下來  
  28. } else...{  
  29. query.last(); //否則定位到結(jié)果最后,qt 文檔說,這個方法非常慢  
  30. numRows = query.at() + 1;  
  31. }  
  32. QString id, lname, fname, phone; QDateTime dob;   
  33. display.append("===========================================");   
  34. display.append(QString::fromLocal8Bit(" id | 姓名 | 生日 | 電話"));   
  35. display.append("--------------------------------------");  
  36. while(query.next())...{ // 定位結(jié)果到下一條記錄  
  37. id = query.value(0).toString();  
  38. lname = QString::fromLocal8Bit(query.value(1).toByteArray());  
  39. fname = QString::fromLocal8Bit(query.value(2).toByteArray());  
  40. dob = query.value(3).toDateTime();  
  41. phone = QString::fromLocal8Bit(query.value(4).toByteArray());  
  42. QString result = id + " " + fname + lname + " " + (dob.toString()) + " "+phone;  
  43. display.append(result); }  
  44. display.append("============================================");  
  45. display.append(QString("totally %1 rows").arg( numRows) );  
  46. } else ...{ // 如果查詢失敗,用下面的方法得到具體數(shù)據(jù)庫返回的原因  
  47. QSqlError error = query.lastError();  
  48. display.append("From mysql database: " + error.databaseText());  
  49. }  
  50.  } else ...{ // 打開數(shù)據(jù)庫失敗,顯示數(shù)據(jù)庫返回的失敗描述  
  51. display.append("cannot open database.");  
  52. display.append("Reason: " + db.lastError().databaseText());  
  53. }  
  54. QApplication::connect(&app, SIGNAL(lastWindowClose()), &app, SLOT(quit()));  
  55. return app.exec();  

2 編譯程序 存盤后(假定存為 client.cpp ), 我們需要生成qt 工程文件。 打開“DOS”窗口,cd 到 你client.cpp 所在的目錄下, 輸入

  1. qmake -project QT += sql -o client.pro  

這樣就生成了工程文件 client.pro, 但是這對編譯是不夠的,因為還需要手動讓qmake生成makefile的時候鏈接相關的sql庫文件。 然后存盤就搞定了, 就這么簡單 :)。 接下來就是固定套路

  1. qmake   
  2. mingw32-make//可以不用這個,用sql database driver中生成驅(qū)動的方法 

看看新生成的 Release 目錄下, 我們的 client 程序已經(jīng)編譯好了。運行一下試試看 ;)

在整個上面的過程中,最郁悶的地方是Qtmysql驅(qū)動還需要用戶自己編譯, 相信這個會給很多人帶來麻煩(如果使用linux系統(tǒng), 那么按 Qt 文檔生成驅(qū)動應該是完全沒有問題的, windows用戶會遇到庫格式不兼容的問題)。

小結(jié):Qt 4 訪問 Mysql 數(shù)據(jù)庫實例的內(nèi)容介紹完了,希望本文對你有所幫助!

責任編輯:zhaolei 來源: 互聯(lián)網(wǎng)
相關推薦

2011-07-01 14:06:57

Qt sqlite

2011-07-05 18:04:45

QT Mysql

2011-07-05 14:46:34

2011-07-05 10:16:16

Qt 數(shù)據(jù)庫 SQLite

2011-06-21 15:11:04

QT 數(shù)據(jù)庫

2011-06-27 13:49:43

Qt 數(shù)據(jù)庫 QSqlQueryM

2011-06-27 13:32:21

Qt 數(shù)據(jù)庫 QSqlQueryM

2010-04-14 15:45:49

Oracle 數(shù)據(jù)庫

2010-05-20 14:52:42

MySQL數(shù)據(jù)庫

2011-07-01 10:55:25

Qt 登陸窗口 界面

2009-08-12 14:27:36

訪問MySQL數(shù)據(jù)庫C# ODBC

2011-07-12 16:41:14

mysql處理異常

2010-06-09 17:36:45

MySQL數(shù)據(jù)庫同步

2019-10-12 16:15:13

MySQL數(shù)據(jù)庫多實例

2011-06-10 10:31:57

QT mysql linux

2011-07-05 10:03:00

Qt MYSQL 數(shù)據(jù)庫

2010-03-08 09:43:50

.NET應用訪問數(shù)據(jù)庫

2010-05-12 18:41:34

MySQL數(shù)據(jù)庫

2011-06-10 10:00:16

Qt 數(shù)據(jù)庫 MySQL

2010-06-07 15:09:44

訪問MySQL數(shù)據(jù)庫
點贊
收藏

51CTO技術棧公眾號