青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

逛奔的蝸牛

我不聰明,但我會很努力

   ::  :: 新隨筆 ::  ::  :: 管理 ::
云帆 2006/5/18

因為目前無法使用linux, 所以 Qt 4.1.2 是 windows 開源版, mySql 5.0.21 也是windows 開源版。不過這2個軟件都是跨平臺的,方法大同小異。

一、配置windows下開發環境。

1. Qt 的安裝
這個很簡單, 去 trolltech 網站自己下載一個 windows 開源版的就好了。然后雙擊安裝, 一路next, 如果問是否需要安裝 MinGW, 點是, 然后next下去, 就完成了。

2. MySQL 的安裝
我不喜歡安裝東西, 所以去 www.mysql.com 下了個非安裝版, 直接放到C盤下了。

至此, 安裝環境完成。 

二、解決 mysql 的 Qt 驅動問題

這個問題困擾了我一些時間, 因為 Qt 安裝完后, 沒有帶 mySQL 的驅動, 寫好的程序運行會提示說 “Driver not loaded”。不過還好, 在 src 目錄下可以找到 mysql qt 驅動的源代碼。 后來我用 Qt assistant 上說的方法,但始終無法生成庫文件, 總有鏈接錯誤。 后來google 一下,在 qtcn 上看到他們站長發的一篇文章,才知道是 mysql 默認帶的庫文件是 ms 格式的, 所以使用 make 的話,ld 程序鏈接時會失敗。 如果大家使用linux系統, 那么就只需按 assistant 說的就夠了, 下面 XChinux 也提到了。

解決的辦法他也給出了。轉錄如下:

以下引用引自:http://www.qtcn.org/bbs/read.php?tid=4210&fpage=&toread=&page=1
作者:XChinux

QUOTE:
Qt4 OpenSource for mingw中編譯MySQL驅動

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

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


CODE:[Copy to clipboard]You need to get the MySQL installation files. Run SETUP.EXE and choose "Custom Install". Install the "Libs & Include Files" Module. Build the plugin as follows (here it is assumed that MySQL is installed in C:\MYSQL):
   cd %QTDIR%\src\plugins\sqldrivers\mysql
   qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.LIB" 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目錄里的內容拷貝到 mingw的bin目錄下面。mysql安裝的時候默認的安裝路徑中有空格,我們得先把它的include和lib目錄拷貝到沒有空格的路徑下,比如C: \mysql下)


CODE:[Copy to clipboard]cd c:\mysql\lib\opt
reimp -d libmysql.lib
dlltool -k -d libmysql.def -l libmysql.a
如此,這樣我們的命令行為(注意qmake和make):


CODE:[Copy to clipboard]   cd %QTDIR%\src\plugins\sqldrivers\mysql
   qmake -o Makefile "INCLUDEPATH+=C:\MYSQL\INCLUDE" "LIBS+=C:\MYSQL\LIB\OPT\LIBMYSQL.a" mysql.pro
   make
這下便會在%QTDIR%\plugins\sqldrivers目錄下面生成libqsqlmysql.a, qsqlmysql.dll這兩個文件了。
有一點, 就是下載他給出的mingw-utils-0.3.tar.gz 文件, 只需要把里面的 reimp 工具復制到你的 minGW目錄下的bin 里就可以了,這樣按上面的步驟就可以生成需要的驅動了。 make 結束后, 庫文件會生成到qt的系統目錄中去。


三、簡單配置 mysql

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

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

2. 測試客戶端鏈接
再開一個“DOS”窗口, 輸入:

CODE:[Copy to clipboard]mysql -u root
來訪問 mysql 服務, 這個非安裝版, 默認含有 root 用戶, 也就是mysql 里的最高用戶, 什么都可以做。同時默認 root 用戶沒有密碼。 當然你可以登錄后使用

CODE:[Copy to clipboard]SET PASSWORD= PASSWORD("密碼")
來設置自己的密碼。

登錄后, 就進入 mysql 環境, 提示符也成了 mysql>

3. 為我們的測試程序新建一些數據

3.1 創建一個數據庫

CODE:[Copy to clipboard]mysql> create database example;
Query OK, 1 row affected (0.03 sec)
mysql> use example;
Database changed
這樣就創建了一個叫 example 的數據庫, 我們后面就使用這個庫來做試驗。

3.2 創建一個可以完全控制這個數據庫的用戶

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

3.3 用 yunfan 帳號登錄

CODE:[Copy to clipboard]mysql -u yunfan
如果有密碼, 那么使用

CODE:[Copy to clipboard]mysql -u yunfan -p
或者輸入完-p后直接回車, 程序會讓你輸入密碼。

3.4 新建一個表

CODE:[Copy to clipboard]mysql> CREATE TABLE employee (
       -> id   CHAR(3),
       -> lastname VARCHAR(30),
       -> firstname VARCHAR(20),
       -> dob DATETIME,
       -> phone VARCHAR(10)
       -> );
Query OK, 0 rows affected (0.00 sec)
這樣就新建了一個叫做 employee 的表,含有 4 個字段, id 號, 姓, 名,生日, 電話。

我們然后插入2條記錄:

CODE:[Copy to clipboard]mysql> INSERT INTO employee VALUES ("001", "熱", "X", "2000-05-18", "5188");
Query OK, 1 row affected (0.05 sec)
mysql> INSERT INTO employee VALUES ("002", "包", "子", "2000-05-18", "5198")
Query OK, 1 row affected (0.00 sec)
那么, 現在我們就準備好了所有數據了。

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

1 Qt 連接 mysql 實例講解

下面的例子非常的簡單, 使用了 QTextEdit 來顯示查詢到的內容,主要是要說明Qt 4 中如何連接和訪問數據庫。至于用什么顯示, 不是現在我們關心的問題。:)

CODE:[Copy to clipboard]#include <QtGui>
#include <QtSql>

int main(int argc, char **argv)
{
QApplication app(argc, argv);

QTextEdit display;
display.resize(400, 160);
display.show();

       // 下面進行數據庫的設置
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL"); // 使用mysql數據庫驅動
db.setHostName("localhost");
db.setDatabaseName("example"); // 我們之前建立的數據庫
db.setUserName("yunfan"); // 我們創建的 yunfan 用戶名
db.setPassword("password"); // yunfan 用戶的密碼

bool ok = db.open(); // 嘗試連接數據庫

if(ok){ // 這里用yunfan已經成功連上數據庫
QSqlQuery query;   // 新建一個查詢的實例

if(query.exec("select * from employee")){   // 嘗試列出 employee 表的所有記錄
                     // 本次查詢成功
int numRows = 0;

                     // 詢問數據庫驅動,是否驅動含有某種特性
if(db.driver()->hasFeature(QSqlDriver::QuerySize)){
numRows = query.size(); // 如果支持結果影響的行數,那么直接記錄下來
} else{
query.last();   //否則定位到結果最后,qt 文檔說,這個方法非常慢
numRows = query.at() + 1;
}

QString id, lname, fname, phone;
QDateTime dob;
display.append("===========================================");
display.append(QString::fromLocal8Bit(" id |   姓名 |   生日     | 電話"));
display.append("--------------------------------------");
while(query.next()){ // 定位結果到下一條記錄
id = query.value(0).toString();
lname = QString::fromLocal8Bit(query.value(1).toByteArray());
fname = QString::fromLocal8Bit(query.value(2).toByteArray());
dob = query.value(3).toDateTime();
phone = QString::fromLocal8Bit(query.value(4).toByteArray());
QString result = id + " " + fname + lname + "   " + (dob.toString()) + "   "+phone;
display.append(result);
}
display.append("============================================");
display.append(QString("totally %1 rows").arg( numRows) );
} else {
                     // 如果查詢失敗,用下面的方法得到具體數據庫返回的原因
QSqlError error = query.lastError(); 
display.append("From mysql database: " + error.databaseText());
}
} else {
            // 打開數據庫失敗,顯示數據庫返回的失敗描述
display.append("cannot open database.");
display.append("Reason: " + db.lastError().databaseText());
}
QApplication::connect(&app, SIGNAL(lastWindowClose()), &app, SLOT(quit()));
return app.exec();
}
2 編譯程序

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

CODE:[Copy to clipboard]qmake -project -o client.pro
這樣就生成了工程文件 client.pro, 但是這對編譯是不夠的,因為還需要手動讓qmake生成makefile的時候鏈接相關的sql庫文件。現在,打開client.pro, 隨便找一行,回車來建個新行,
然后加上幾個字:

CODE:[Copy to clipboard]QT += sql
然后存盤就搞定了, 就這么簡單 :)。 接下來就是固定套路

CODE:[Copy to clipboard]qmake
make
看看新生成的 Release 目錄下, 我們的 client 程序已經編譯好了。運行一下試試看 ;)


五、總結一下

大家可以看到,使用 Qt 來連接 mysql 是非常簡單的事情, 當然 Qt 還提供了一些數據庫相關的 widget 來更好的顯示,更新數據。這個以后我用到了也會相繼寫些總結出來, 大家一起共享。我在整個上面的過程中, 最郁悶的地方是Qt的mysql驅動還需要用戶自己編譯,相信這個會給很多人帶來麻煩(如果使用linux系統, 那么按 Qt 文檔生成驅動應該是完全沒有問題的, windows用戶會遇到庫格式不兼容的問題)。好了, 這也是我第一次用Qt 來訪問數據庫, 也是一次摸 mysql, 說錯的,不合適的地方,大家扔磚頭吧.
From: http://qtcn.org/bbs/read.php?tid=22874
posted on 2009-10-20 13:53 逛奔的蝸牛 閱讀(1169) 評論(0)  編輯 收藏 引用 所屬分類: Qt
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲伦理在线免费看| 欧美日韩精品在线播放| 欧美日韩成人| 亚洲成人资源| 亚洲国产精品va| 久久一区亚洲| 亚洲婷婷国产精品电影人久久| 亚洲国产精品悠悠久久琪琪| 欧美精品福利视频| 久久精品国产99国产精品| 欧美一区二视频| 亚洲精品一级| 久久国产精品亚洲va麻豆| 亚洲精品久久视频| 午夜久久黄色| 夜夜嗨av一区二区三区四区| 欧美影院视频| 亚洲欧美在线视频观看| 免费观看久久久4p| 久久久久久夜| 国产九区一区在线| 99re6热只有精品免费观看 | 国产精品videossex久久发布| 久久人人97超碰人人澡爱香蕉 | 国产亚洲电影| 亚洲视频一区| 亚洲欧美一区二区视频| 欧美日韩国产天堂| 亚洲日本理论电影| 一本一本久久| 欧美人与性禽动交情品| 亚洲欧洲一区二区三区在线观看 | 久久精品国产亚洲aⅴ| 欧美日韩在线播放一区二区| 麻豆9191精品国产| 国产在线欧美日韩| 欧美一区二区视频在线观看2020 | 久久成人资源| 国产日韩欧美电影在线观看| 午夜久久99| 亚洲欧洲三级| 欧美一区二区免费| 精品69视频一区二区三区| 麻豆精品精华液| 日韩网站在线看片你懂的| 欧美有码在线视频| 亚洲成人在线观看视频| 欧美国产专区| 亚洲一区视频在线| 亚洲福利国产精品| 欧美一区二区三区精品电影| 亚洲黄色免费| 国产欧美日韩中文字幕在线| 欧美成人69| 亚洲欧美日韩中文播放| 亚洲乱码一区二区| 免费毛片一区二区三区久久久| 亚洲天堂成人在线视频| 亚洲国产精品123| 国产精品素人视频| 欧美日韩亚洲综合在线| 老司机一区二区三区| 久久不射电影网| 亚洲精品视频在线观看网站| 欧美黄色小视频| 麻豆freexxxx性91精品| 欧美一区三区三区高中清蜜桃| 亚洲日本免费| 亚洲久久成人| 99亚洲伊人久久精品影院红桃| 国产一区二区日韩精品| 一本色道**综合亚洲精品蜜桃冫| 久久视频一区| 亚久久调教视频| 亚洲一区亚洲| 亚洲美女在线观看| 99精品国产福利在线观看免费| 亚洲国产日韩欧美| 一本久久综合亚洲鲁鲁| 99视频一区| 亚洲嫩草精品久久| 性久久久久久| 久久久久久婷| 蜜月aⅴ免费一区二区三区| 久久久久国产精品一区三寸| 久久久国际精品| 亚洲高清一区二| 正在播放欧美一区| 久久久999成人| 欧美精品三级| 国模吧视频一区| 亚洲三级影院| 欧美在线网址| 亚洲激情一区二区三区| 午夜精品成人在线视频| 免费高清在线视频一区·| 国产精品国产三级欧美二区| 国产亚洲午夜| 亚洲欧美日韩国产精品| 牛牛精品成人免费视频| 在线亚洲一区| 欧美成人午夜剧场免费观看| 国产精品视频免费观看www| 亚洲国产导航| 久久亚洲一区二区| 亚洲欧美日韩国产成人精品影院 | 国产精品腿扒开做爽爽爽挤奶网站| 亚洲欧美日本国产有色| 欧美激情第4页| 国产日产欧产精品推荐色| 亚洲精品视频在线观看网站| 宅男噜噜噜66一区二区66| 狠狠色伊人亚洲综合网站色| 一区电影在线观看| 欧美成人综合| 欧美激情视频在线免费观看 欧美视频免费一 | 欧美在线看片| 在线视频中文亚洲| 欧美激情影音先锋| 亚洲国产成人久久| 久久精品国产视频| 日韩视频免费看| 久久久久久夜精品精品免费| 欧美午夜精品伦理| 欧美gay视频激情| 国产欧美日本在线| 亚洲三级免费电影| 国产精品视频yy9099| 一区二区激情视频| 亚洲一区二区高清视频| 国产精品在线看| 久久精品一本| 久久婷婷国产综合精品青草| 亚洲国产成人在线播放| 一本色道久久88综合亚洲精品ⅰ| 欧美精品国产一区二区| 亚洲一区激情| 久久不见久久见免费视频1| 亚洲激情专区| 亚洲一区二区在线播放| 国产一区二区三区奇米久涩 | 国产精品久久久免费| 欧美gay视频激情| 亚洲第一天堂av| 久久高清免费观看| 亚洲欧美国产视频| 久久成人羞羞网站| 国产精品黄色| 亚洲人成高清| 亚洲婷婷免费| 国产精品一区二区女厕厕| 宅男精品导航| 欧美一区二区免费| 国内成人精品2018免费看| 久久国内精品视频| 欧美黄色免费| 亚洲一区3d动漫同人无遮挡| 欧美性猛片xxxx免费看久爱| 一区二区三区欧美在线| 午夜老司机精品| 在线成人av.com| 国产精品成人在线| 亚洲精品在线观| 9人人澡人人爽人人精品| 亚洲免费综合| 亚洲日产国产精品| 国产欧美日韩精品专区| 欧美成人精品在线播放| 欧美一区二区三区电影在线观看| 欧美成人精品在线视频| 亚洲一区二区久久| 日韩视频久久| 国产一二三精品| 欧美激情一区二区三区在线视频| 一片黄亚洲嫩模| 久热国产精品| aa日韩免费精品视频一| 国产三级欧美三级| 欧美日韩成人在线| 久久国产精品黑丝| 夜夜狂射影院欧美极品| 久久久久欧美| 亚洲无线视频| 亚洲精品之草原avav久久| 极品av少妇一区二区| 欧美性猛交xxxx免费看久久久| 久久亚洲欧美| 欧美在线在线| 欧美在线看片| 午夜视频一区在线观看| 国产精品99久久久久久白浆小说| 亚洲大胆在线| 欧美jizz19性欧美| 久久综合给合久久狠狠色| 久久久精彩视频| 久久影音先锋| 牛牛国产精品| 亚洲人成小说网站色在线| 国产精品久久国产精麻豆99网站| 午夜日韩在线|