精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺析QT MySql操作

移動開發
本文介紹的是QT My Sql操作,它是一個小型關系型數據庫管理系統,另外還有GUI管理工具,例如早先的mysql-front 以及 ems mysql manager,navicat等,現在與C++相結合的一款軟件。

1.MySql驅動編譯

在windows系統中,我們在mingw,MySql5和Qt4的環境中編譯MySql驅動主要有以下幾個步驟:

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

(2)將mingw-utils-0.3.tar.gz解壓縮,將bin目錄下的reimp 工具復制到 mingw目錄下的bin 里,如果Dev-C++就復制到C:\Dev-Cpp\bin目錄下

(3)將MySql安裝目錄下的include和lib目錄拷貝到沒有空格的路徑下,比如C: \mysql下;

(4)打開Qt Command Prompt,分別執行以下命令:

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

這樣在c:\mysql\lib\opt目錄下就會生成一個libmysql.a文件;

(5)接下來執行以下命令:

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

找到%QTDIR%\src\plugins\sqldrivers\mysql\下的Makefile.release 和 Makefile.debug文件,去掉-llibmysql項再make編譯,這下便會在%QTDIR%\plugins\sqldrivers目錄下面生成libqsqlmysql.a, qsqlmysql.dll這兩個文件,然后在程式的.pro文件中添加QT+=sql并在程式開頭包含#include 就能操作數據庫了。
2.完全解決數據庫存儲中文和Qt程式顯示數據庫中文及中文字符串的問題

(1)數據庫和表及表里的字符相關字段(varchar, char, text等)都要使用gbk_chinese_ci這種方式,不這樣做也能,但這樣做,會省非常多麻煩。

(2)重新編譯Qt的MySQL驅動,需要修改src / sql / drivers / mysql / qsql_mysql.cpp文件。要修改的部分如下:***百零八行的codec函數  

  1. static QTextCodec* codec(MYSQL* mysql)   
  2. {   
  3. return QTextCodec::codecForName("GBK");//增加部分   
  4. #if MYSQL_VERSION_ID >= 32321   
  5.    QTextCodec* heuristicCodec = QTextCodec :: codecForName ( mysql_character_set_name ( mysql ) );   
  6. if (heuristicCodec)   
  7.    return heuristicCodec;   
  8. #endif   
  9. return QTextCodec::codecForLocale();   
  10. }  

(3)然后,重新編譯qt的mysql驅動在Qt程式main函數中app后面開頭處加入下面三句,加上這三個是省得不必要的麻煩  

  1. QTextCodec::setCodecForLocale(QTextCodec::codecForName("GBK"));   
  2. QTextCodec::setCodecForCStrings(QTextCodec::codecForName("GBK"));   
  3. QTextCodec::setCodecForTr(QTextCodec::codecForName("GBK"));  

(4)在Qt數據庫連接后,運行"SET NAMES ’UTF8’"語句或"SET NAMES ’GBK’"。

  1. db = QSqlDatabase::addDatabase("QMYSQL");   
  2. db.setHostName("localhost");   
  3. db.setDatabaseName("yourdatabase");   
  4. db.setUserName("yourusername");   
  5. db.setPassword("yourpassword");   
  6. db.open();   
  7. db.exec("SET NAMES ’UTF8’");  

經過以上四步,就能在Qt程式中直接使用中文字符串,而且能直接使用中文字符串出入于程式和數據庫之間

#p#

3.連接MySql數據庫

  1. QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");   
  2. db.setHostName("localhost");   
  3. db.setDatabaseName("test");   
  4. db.setUserName("root");   
  5. db.setPassword("******");   
  6. bool ok = db.open(); 

鏈接QSLite數據庫:

  1. QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE");  

4.SELECT操作

  1. QSqlQuery query;   
  2. int numRows;   
  3. query.exec("SELECT * FROM scores ORDER BY id ASC");   
  4. while (query.next())   
  5. {   
  6. QString name = query.value(0).toString();//query.value()的參數只能是index   
  7. int salary = query.value(1).toInt();   
  8. label = setText(QString::number(salary)+name);//測試查詢數據的行數   
  9. if (db.driver()->hasFeature(QSqlDriver::QuerySize))   
  10. {   
  11.    numRows = query.size();   
  12. }   
  13. else   
  14. {   
  15.    // this can be very slow   
  16.    query.last();   
  17.    numRows = query.at() + 1;   
  18. }   

5.INSERT操作

(1)直接插入(一條記錄)

  1. QSqlQuery query;   
  2. query.exec("INSERT INTO employee (id, name, salary) VALUES (1001, ’Thad Beaumont’, 65000)");  

(2)通過“:字段”操作

  1. QSqlQuery query;   
  2. query.prepare("INSERT INTO employee (id, name, salary) VALUES (:id, :name, :salary)");   
  3. query.bindValue(":id", 1001);   
  4. query.bindValue(":name", "Thad Beaumont");   
  5. query.bindValue(":salary", 65000);   
  6. query.exec();  

(3)通過“?”操作

  1. QSqlQuery query;   
  2. query.prepare("INSERT INTO employee (id, name, salary) VALUES (?, ?, ?)");   
  3. query.addBindValue(1001);   
  4. query.addBindValue("Thad Beaumont");   
  5. query.addBindValue(65000);   
  6. query.exec();  

6.UPDATE操作

  1. QSqlQuery query;   
  2. query.exec("UPDATE employee SET salary = 70000 WHERE id = 1003");  

7.DELETE操作

  1. QSqlQuery query;   
  2. query.exec("DELETE FROM employee WHERE id = 1007");  

8.transaction()操作

有時為了執行一系列復雜的操作,使用QSqlDatabase::transaction()能加快速度

  1. //database為QSqlDatabase對象   
  2. if(database.driver()->hasFeature(QSqlDriver::Transactions)) //測試數據庫是否支持Transactions,   
  3. {   
  4. database.transaction();   
  5. query.exec("SELECT name FROM scores WHERE id=19");   
  6. if(query.next())   
  7. {   
  8.       //str = query.value(0).toString();   
  9.       str = "中國";   
  10.       query.exec("INSERT INTO scores(name) VALUES(’"+str+"’)");   
  11. }   
  12. database.commit();   
  13. }  

注意,如果str為中文字符串,在SQL語句中需要標明’str’(用單引號括起),如果是英文或數字字符串,能不加單引號(指的是包含在雙引號內的SQL語句)

 #p#

9.使用SQL Model類

QSqlQueryModel——一個只讀的讀取數據庫數據的模型

QSqlTableModel——一個可讀寫的單一表格模型,能不用寫SQL語句

QSqlRelationalTableModel——QSqlTableModel的一個子類

這些類都繼承于QAbstractTableModel,而他們又都繼承于QAbstractItemModel

(1) QSqlQueryModel的使用

  1. QSqlQueryModel querymodel;   
  2. querymodel.setQuery("SELECT * FROM scores ORDER BY id ASC");   
  3. for (num=0;numquerymodel.rowCount();num++)   
  4. {   
  5. str += QString::number(querymodel.record(num).value("id").toInt());   
  6. str += " ";   
  7. str += querymodel.record(num).value("name").toString();   
  8. //注意這里的value()參數能是index(索引)也能是字段名,前面QSqlQuery的value()參數只能是index   
  9. str += "\n";   
  10. }   
  11. label->setText(str);  

(2) QSqlTableModel的使用

① 讀取數據

  1. QSqlTableModel tablemodel;  
  2. tablemodel.setTable("scores");   
  3. tablemodel.setFilter("id > 10");   
  4. tablemodel.setSort(0,Qt::DescendingOrder);   
  5. tablemodel.select();   
  6. for (num=0;numtablemodel.rowCount();num++)   
  7. {   
  8. str += QString::number(tablemodel.record(num).value("id").toInt());   
  9. str += " ";   
  10. str += tablemodel.record(num).value(1).toString();   
  11. str += "\n";   
  12. }   
  13. label->setText(str);  

② 修改數據

  1. QSqlTableModel tablemodel;   
  2. tablemodel.setTable("scores");   
  3. tablemodel.setFilter("id > 10");   
  4. tablemodel.setSort(0,Qt::DescendingOrder);   
  5. tablemodel.select();   
  6. for (num=0;numtablemodel.rowCount();num++)   
  7. {   
  8. QSqlRecord record = tablemodel.record(num);   
  9. record.setValue("name",record.value("name").toString()+"2");   
  10. tablemodel.setRecord(num,record);   
  11. }   
  12. if(tablemodel.submitAll())   
  13. label->setText("修改成功!");   
  14. else   
  15. label->setText("修改失?。?quot;);  

或能用setData()來修改,代碼如下:

  1. QSqlTableModel tablemodel;   
  2. tablemodel.setTable("scores");   
  3. tablemodel.setFilter("id > 10");   
  4. tablemodel.setSort(0,Qt::DescendingOrder);   
  5. tablemodel.select();   
  6. tablemodel.setData(tablemodel.index(2,1),"data修改");   
  7. if(tablemodel.submitAll())   
  8.     label->setText("修改成功!");   
  9. else   
  10.     label->setText("修改失敗!");  

③ 刪除數據

  1. tablemodel.removeRows(row, 5);   
  2. //removeRows()***個參數為要刪除的***行的行數,第二個參數為要刪除的總行數;   
  3. tablemodel.submitAll();   
  4. //注意,利用QSqlTableModel修改或刪除數據,***都要使用submitAll()執行更改  

④ 插入數據

  1. QSqlRecord record = tablemodel.record();   
  2. record.setValue("name","插入的");   
  3. tablemodel.insertRecord(2,record);   
  4. //注意,此處插入利用insertRecord()函數,該函數***個參數為插入到tablemodel的第幾行,  
  5. 第二個參數為記錄,注意這里的記錄一 定要和tablemodel中的記錄匹配,  
  6. 故QSqlRecord record = tablemodel.record();另外,插入操作不用submitAll(),因為,insertRecord()返回bool值。   

10.使用QTableView

開頭處要使用#include

  1. QTableView *view = new QTableView();   
  2. view->setModel(&model);   
  3. view->setEditTriggers(QAbstractItemView::NoEditTriggers);   
  4. view->show(); 

【編輯推薦】

在VS2008中使用Qt編程

mysql修改、刪除數據記錄

深度解析 QT 編譯安裝方法

 Qt 平臺中使GUI保持響應流暢

MySQL導入導出大量數據程序實現方法

教你如何利用MySQL學習MongoDB之安裝篇

責任編輯:zhaolei 來源: 網絡轉載
相關推薦

2011-06-10 13:21:00

Qt 網絡

2011-06-10 11:24:08

Qt Quick Designer

2011-06-21 13:52:18

Qt 界面

2011-06-20 15:13:08

Qt 對象模型

2011-06-13 11:07:22

QT 移植

2011-06-15 18:00:26

2011-06-09 18:24:36

QT Wince

2011-06-22 14:04:33

Qt 元類型 注冊

2011-06-10 15:00:02

Qt VC

2009-09-15 13:30:54

linq級聯

2010-06-11 10:30:38

MySQL編碼

2011-06-29 15:14:22

Qt Embedded 鍵盤

2011-06-29 15:36:21

Qt Embedded 鍵盤

2011-06-10 14:33:38

Qt VC.NET

2011-06-10 09:09:38

Qt Creator OpenCV

2011-06-23 11:16:39

Qt Excel

2011-07-05 14:29:44

Ubuntu QT Mysql

2009-09-10 14:47:53

Linq .NET查詢

2009-08-17 13:34:02

C#異步操作

2011-07-05 18:04:45

QT Mysql
點贊
收藏

51CTO技術棧公眾號

国产精品白丝jk黑袜喷水| 亚洲图片久久| 亚洲精品国产一区二区精华液 | 性色国产成人久久久精品| 99久久er| 亚洲免费观看高清在线观看| 亚洲a中文字幕| 91传媒免费观看| jazzjazz国产精品久久| 欧美午夜片欧美片在线观看| 欧美一区二区高清在线观看| 亚洲网站在线免费观看| 欧美一区二区三区久久精品| 亚洲国产高潮在线观看| 国产成人手机视频| 国产区在线观看| 国产成a人无v码亚洲福利| 97超视频免费观看| 51精品免费网站| 欧洲亚洲一区二区三区| 欧美性受xxxx| 久久亚洲中文字幕无码| 在线观看av的网站| 99久免费精品视频在线观看 | 成人做爰免费视频免费看| 亚洲免费观看高清完整版在线观看熊| 国产一区再线| 国产伦精品一区二区三区免.费 | 日本精品免费在线观看| 国产原创精品视频| 久久久精品国产99久久精品芒果| 亚洲伊人第一页| 中文字幕69页| 激情文学一区| 久久精品国产精品亚洲| 精品人妻无码一区二区三区| 国产一区二区三区亚洲综合| 欧美日韩一区二区在线| 国产精品一区在线免费观看| 久久经典视频| 99麻豆久久久国产精品免费优播| 成人福利网站在线观看11| 欧美日韩一级黄色片| 国产真实久久| 一区二区亚洲欧洲国产日韩| 久久久久亚洲AV成人无码国产| 不卡精品视频| 欧美私人免费视频| 一本色道无码道dvd在线观看| 欧美激情视频网站| 日韩中文字幕电影| 中文在线综合| 欧美一区二区三区系列电影| 91蝌蚪视频在线观看| 77thz桃花论族在线观看| 最新国产精品久久精品| 亚洲国产欧美日韩| 裸体xxxx视频在线| 91丨porny丨首页| 国产精品一区二区欧美黑人喷潮水| 91黄色在线视频| 蜜臀久久99精品久久久画质超高清 | 欧美一区二区三区综合| 国产youjizz在线| 久久蜜桃香蕉精品一区二区三区| 国产一级二级三级精品| 日韩视频免费大全中文字幕| 91久久伊人青青碰碰婷婷| 午夜精品一区二| 在线亚洲伦理| 97久久精品国产| 精品亚洲永久免费| 精品91在线| 久久免费精品日本久久中文字幕| 一区二区视频免费看| 色综合五月天| 亚洲一品av免费观看| 亚洲成人黄色av| blacked蜜桃精品一区| 国产小视频国产精品| 老熟妇一区二区| 精品日本12videosex| 国产午夜精品视频| 丝袜美腿中文字幕| 国产精品玖玖玖在线资源| 精品国一区二区三区| 天天躁日日躁狠狠躁av| 亚洲精品v日韩精品| 欧美三级电影在线看| 欧美日韩在线中文| 日韩性xxx| 欧美午夜精品理论片a级按摩| 午夜精品久久久久久久99热浪潮 | 亚洲午夜久久久影院| 国产一二三四五区| 久久精品亚洲欧美日韩精品中文字幕| 久久精品一偷一偷国产| 久久久久久久国产精品毛片| 亚洲精选久久| 国产91在线视频| 国产精品欧美久久久久天天影视| 九色综合国产一区二区三区| 99re视频在线| 黄色在线网站| 一区二区高清在线| 久章草在线视频| 99精品在线免费观看| 欧美日韩国产一区二区三区地区| 麻豆精品国产传媒| 亚洲素人在线| 欧美日本中文字幕| 欧美日韩综合一区二区三区| 麻豆成人免费电影| 精品国产一区二区三区日日嗨| 久草在现在线| 国产精品人人做人人爽人人添| 黄色一级片国产| 欧美xnxx| 亚洲成人精品久久久| 亚洲一级片在线播放| 一区在线免费观看| 国产欧美一区二区三区久久人妖| 风流少妇一区二区三区91| 久久网这里都是精品| 丰满女人性猛交| 草草视频在线| 欧美一区二区三区在| 黄色在线观看av| 久久精品国产大片免费观看| 国内精久久久久久久久久人| 黄色一区二区视频| 99热这里都是精品| avove在线观看| 中文字幕在线视频久| 欧美成人女星排名| 日本爱爱小视频| 久热国产精品| 成人免费在线看片| 激情影院在线观看| 在线精品观看国产| 中文字幕人妻一区二区三区| 亚洲女同中文字幕| 国产精品男人爽免费视频1| 午夜av免费观看| 亚洲综合另类小说| 三上悠亚av一区二区三区| 香蕉视频一区| 91av在线国产| 欧美一级做性受免费大片免费| 亚洲视频在线观看三级| 一区二区三区入口| 蜜桃一区二区三区| 国产91成人在在线播放| 三级在线观看网站| 一区二区三区在线观看国产 | 美日韩一区二区| 日韩精品久久久毛片一区二区| 波多野结衣亚洲一二三| 日韩精品视频在线播放| 五月婷婷中文字幕| 91丨porny丨国产入口| 欧美成人高潮一二区在线看| 9国产精品午夜| 精品国偷自产在线视频| 国产精品午夜一区二区| 久久精品这里都是精品| 久久午夜夜伦鲁鲁一区二区| 精品日韩免费| 国产精品久久久久久久久久小说 | 精品国一区二区三区| 久久久久久福利| 成人三级伦理片| 久在线观看视频| 日韩欧美影院| 国外成人性视频| 香蕉视频成人在线| 精品国产精品自拍| 黄瓜视频污在线观看| 久久久久久久欧美精品| 茄子视频成人在线观看 | 久久最新网址| 国产精品劲爆视频| 美女隐私在线观看| 91精品国产aⅴ一区二区| 欧美日韩人妻精品一区二区三区| 国产精品资源网站| 欧美视频在线免费播放| 亚洲福利天堂| 国产精品色视频| 精品国产99久久久久久| 亚洲成人av在线| 成人h动漫精品一区二区下载| 国产精品午夜在线| 一区二区三区人妻| 亚洲一区亚洲| 欧美日本韩国国产| 亚洲久草在线| 久久男人资源视频| 国产对白叫床清晰在线播放| 91麻豆精品国产91久久久资源速度 | 好吊色欧美一区二区三区视频 | 国产精品黄色av| 91蜜桃在线视频| 亚洲欧美在线免费观看| 国产精品无码天天爽视频| 亚洲成人综合网站| 粉嫩精品久久99综合一区| 国产成人av电影免费在线观看| 91看片就是不一样| 欧美三区不卡| 日本在线视频一区| 成人在线视频你懂的| 国产成人免费91av在线| 午夜激情在线| 亚洲午夜未满十八勿入免费观看全集| 国产精品视频一二区| 24小时成人在线视频| 国产欧美日韩亚州综合| 亚洲少妇一区二区| 欧美96一区二区免费视频| 日本一本中文字幕| 久久综合亚洲| 国产高清精品一区二区三区| 国产极品久久久久久久久波多结野| 欧美黄色片视频| av在线天堂| 日韩国产欧美区| 亚洲av永久纯肉无码精品动漫| 欧美吞精做爰啪啪高潮| 精品在线视频免费| 亚洲精选视频免费看| 五月婷婷欧美激情| 99精品国产视频| 妖精视频一区二区| 国产精品18久久久久| 国产激情在线观看视频| 一区视频在线| 国产乱子伦精品视频| 国产精品成人a在线观看| 日韩在线电影一区| 日韩激情啪啪| 国产精品日韩高清| 亚洲码欧美码一区二区三区| 成人啪啪免费看| 性感美女一区二区在线观看| 久久久久亚洲精品| 污片视频在线免费观看| 久久视频在线视频| 成人动漫在线免费观看| 日韩精品在线视频| 婷婷色在线观看| 精品sm捆绑视频| www.激情五月| 91麻豆精品国产| 国产女人18毛片水真多| 欧美电影一区二区三区| 在线精品免费视| 欧美视频在线看| 精品国产免费观看| 亚洲美女在线一区| 日韩视频中文字幕在线观看| 国产精品白丝在线| 国产日韩精品中文字无码| 欧美国产丝袜视频| 天天操天天舔天天射| 国产精品午夜在线观看| 天天操天天摸天天舔| 久久精品一区四区| 变态另类丨国产精品| 91片黄在线观看| 亚洲久久久久久久| 欧美国产欧美综合| 国产又粗又长又黄的视频| 亚洲日本丝袜连裤袜办公室| 黄色a级片在线观看| 中文字幕一区二区三区在线不卡 | 国产精品99re| 欧美自拍偷拍午夜视频| 国产伦子伦对白视频| 亚洲成人网在线| 成人在线免费看| 久草视频免费在线| 亚洲国产中文在线| 99精彩视频在线观看免费| 99ri日韩精品视频| 欧美精品尤物在线| 中国精品18videos性欧美| 欧美亚洲色图视频| 玖玖视频精品| wwwxxxx在线观看| 久久精品日韩一区二区三区| 一级性生活免费视频| 亚洲国产va精品久久久不卡综合 | 婷婷一区二区三区| 在线免费av网| 日韩av影院在线观看| 国产午夜精品久久久久免费视| 97久久精品视频| 久久久久久久久久久久电影| 欧美成人第一区| 狠狠88综合久久久久综合网| 午夜欧美不卡精品aaaaa| 日本中文字幕一区二区| 国产三区精品| 雨宫琴音一区二区三区| 国产激情在线观看视频| 成人福利电影精品一区二区在线观看 | 成人毛片18女人毛片| 欧美一二区视频| a天堂中文在线| 日韩av电影在线免费播放| 在线精品自拍| 一区中文字幕在线观看| 日韩精品1区2区3区| 喷水视频在线观看| 亚洲一区二区在线播放相泽| 亚洲最新av网站| 亚洲天堂av高清| 性国裸体高清亚洲| 国产精品一区视频| 午夜国产精品视频免费体验区| 亚洲久久中文字幕| 3d成人动漫在线| 欧美色男人天堂| 久久这里精品| 海角国产乱辈乱精品视频| 国产亚洲观看| 最新国产精品久久| 卡一卡二国产精品| 男女男精品视频网站| 欧美性猛交一区二区三区精品 | 成人精品免费网站| 69xx绿帽三人行| 欧美精品一级二级| 天堂中文а√在线| 国产日韩精品在线播放| 成人羞羞视频播放网站| 91热这里只有精品| 国产欧美一区二区精品性色| 中文字幕第四页| 亚洲美女自拍视频| 写真福利精品福利在线观看| 欧美一级片免费观看| 日韩在线一区二区三区| 国产又黄又粗视频| 欧美日韩久久不卡| 黄网站视频在线观看| 92裸体在线视频网站| 中文字幕午夜精品一区二区三区| 国产又粗又猛大又黄又爽| 亚洲精品菠萝久久久久久久| 性做久久久久久久| 久久久亚洲福利精品午夜| 精品成人自拍视频| 欧美日韩亚洲一| 国产无遮挡一区二区三区毛片日本| 成人免费一级片| 久久精品久久久久| 麻豆精品在线| 久久综合色视频| 国产亚洲1区2区3区| 亚洲综合精品国产一区二区三区| 久久精品国产清自在天天线 | 亚洲国产成人av在线| 免费成人在线电影| 偷拍视频一区二区| 国产一区二区在线观看免费 | 亚洲国产精品第一区二区| 91精品国产自产| 欧美性大战久久久久久久蜜臀| 黄色在线观看网站| 国产精品一区二区你懂得| 丝袜美腿高跟呻吟高潮一区| 99国产精品无码| 精品久久人人做人人爽| 新片速递亚洲合集欧美合集| 亚洲毛片aa| 成人精品一区二区三区中文字幕| 黄色在线观看国产| 久久久av亚洲男天堂| 极品尤物一区| 日韩av自拍偷拍| 偷窥国产亚洲免费视频| www亚洲人| 国产精品av一区| 青青国产91久久久久久| 黄色小视频在线免费看| 伊人男人综合视频网| 9l亚洲国产成人精品一区二三| 少妇性l交大片| 亚洲在线观看免费| 淫片在线观看| 欧美成ee人免费视频| 国产精品乡下勾搭老头1| 无码人妻久久一区二区三区| 九九精品视频在线| 欧美少妇xxxx| 熟女人妻在线视频| 欧美一区二区三区色| 高清电影一区|