国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

詳解QT中數(shù)據(jù)庫(kù)相關(guān)操作

移動(dòng)開(kāi)發(fā)
QT中數(shù)據(jù)庫(kù)的相關(guān)操作是本文要介紹的內(nèi)容,主要是來(lái)了解在QT中數(shù)據(jù)庫(kù)的操作,文章很詳細(xì)的講解的關(guān)于數(shù)據(jù)庫(kù)的操作,具體來(lái)看內(nèi)容。

QT數(shù)據(jù)庫(kù)的相關(guān)操作是本文要介紹的內(nèi)容,主要是來(lái)了解在QT數(shù)據(jù)庫(kù)的操作,文章很詳細(xì)的講解的關(guān)于數(shù)據(jù)庫(kù)的操作,具體來(lái)看內(nèi)容。

數(shù)據(jù)庫(kù)操作

1、MySql驅(qū)動(dòng)編譯

在windows系統(tǒng)中,我們?cè)趍ingw,MySql5和Qt4的環(huán)境中編譯MySql驅(qū)動(dòng)主要有以下幾個(gè)步驟:

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

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

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

(4)打開(kāi)Qt Command Prompt,分別執(zhí)行以下命令:

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

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

(5)接下來(lái)執(zhí)行以下命令:  

  1. cd %QTDIR%\src\plugins\sqldrivers\mysql   
  2.  
  3. 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項(xiàng)再make編譯,這下便會(huì)在%QTDIR%\plugins\sqldrivers目錄下 面生成libqsqlmysql.a, qsqlmysql.dll這兩個(gè)文件,然后在程式的.pro文件中添加QT+=sql并在程式開(kāi)頭包含#include 就能操作數(shù)據(jù)庫(kù)了。

2、完全解決數(shù)據(jù)庫(kù)存儲(chǔ)中文和Qt程式顯示數(shù)據(jù)庫(kù)中文及中文字符串的問(wèn)題

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

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

  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驅(qū)動(dòng)在Qt程式main函數(shù)中app后面開(kāi)頭處加入下面三句,加上這三個(gè)是省得不必要的麻煩  

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

(4)在Qt數(shù)據(jù)庫(kù)連接后,運(yùn)行"SET NAMES ’UTF8’"語(yǔ)句或"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’");  

經(jīng)過(guò)以上四步,就能在Qt程式中直接使用中文字符串,而且能直接使用中文字符串出入于程式和數(shù)據(jù)庫(kù)之間

3、連接MySql數(shù)據(jù)庫(kù)

  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數(shù)據(jù)庫(kù):

  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()的參數(shù)只能是index   
  7. int salary = query.value(1).toInt();   
  8. label = setText(QString::number(salary)+name);//測(cè)試查詢數(shù)據(jù)的行數(shù)   
  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. }   
  19. }  

5、INSERT操作

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

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

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

  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)通過(guò)“?”操作

  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()操作

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

  1. //database為QSqlDatabase對(duì)象   
  2. if(database.driver()->hasFeature(QSqlDriver::Transactions)) //測(cè)試數(shù)據(jù)庫(kù)是否支持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 = "中國(guó)";   
  10.       query.exec("INSERT INTO scores(name) VALUES(’"+str+"’)");   
  11. }   
  12. database.commit();   
  13. }  

注意,如果str為中文字符串,在SQL語(yǔ)句中需要標(biāo)明’str’(用單引號(hào)括起),如果是英文或數(shù)字字符串,能不加單引號(hào)(指的是包含在雙引號(hào)內(nèi)的SQL語(yǔ)句)

9、使用SQL Model類

  1. QSqlQueryModel——一個(gè)只讀的讀取數(shù)據(jù)庫(kù)數(shù)據(jù)的模型   
  2. QSqlTableModel——一個(gè)可讀寫的單一表格模型,能不用寫SQL語(yǔ)句   
  3. QSqlRelationalTableModel——QSqlTableModel的一個(gè)子類  

這些類都繼承于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()參數(shù)能是index(索引)也能是字段名,前面QSqlQuery的value()參數(shù)只能是index   
  9. str += "\n";   
  10. }   
  11. label->setText(str);  

(2) QSqlTableModel的使用

① 讀取數(shù)據(jù)

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

② 修改數(shù)據(jù)

  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("修改失敗!");   
  16. 或能用setData()來(lái)修改,代碼如下:   
  17. QSqlTableModel tablemodel;   
  18. tablemodel.setTable("scores");   
  19. tablemodel.setFilter("id > 10");   
  20. tablemodel.setSort(0,Qt::DescendingOrder);   
  21. tablemodel.select();   
  22. tablemodel.setData(tablemodel.index(2,1),"data修改");   
  23. if(tablemodel.submitAll())   
  24.     label->setText("修改成功!");   
  25. else   
  26.     label->setText("修改失敗!");  

③ 刪除數(shù)據(jù)

  1. tablemodel.removeRows(row, 5);   
  2. //removeRows()***個(gè)參數(shù)為要?jiǎng)h除的***行的行數(shù),第二個(gè)參數(shù)為要?jiǎng)h除的總行數(shù);   
  3. tablemodel.submitAll();   
  4. //注意,利用QSqlTableModel修改或刪除數(shù)據(jù),***都要使用submitAll()執(zhí)行更改  

④ 插入數(shù)據(jù)

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

10、使用QTableView

開(kāi)頭處要使用#include

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

小結(jié):詳解QT數(shù)據(jù)庫(kù)相關(guān)操作的內(nèi)容介紹完了,希望通過(guò)本文的學(xué)習(xí)能對(duì)你有所幫助!

責(zé)任編輯:zhaolei 來(lái)源: csdn博客
相關(guān)推薦

2011-08-30 13:40:28

MySQL線程

2011-07-05 14:46:34

2011-06-23 18:37:02

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

2011-08-24 17:08:28

Oracle數(shù)據(jù)庫(kù)歸檔模式

2011-07-01 14:06:57

Qt sqlite

2011-07-05 09:54:04

2011-06-27 13:49:43

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

2011-06-27 13:32:21

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

2011-07-05 10:16:16

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

2014-11-05 10:37:44

Windows Pho數(shù)據(jù)庫(kù)

2011-04-19 11:02:57

數(shù)據(jù)庫(kù)分頁(yè)

2011-07-05 10:03:00

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

2011-08-18 17:05:16

Oracle數(shù)據(jù)庫(kù)的服

2011-07-01 13:42:24

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

2011-07-05 18:04:45

QT Mysql

2011-07-05 18:11:13

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

2011-06-27 12:56:28

2011-08-30 14:15:34

QTSQLite數(shù)據(jù)庫(kù)

2010-05-31 17:18:39

Cassandra數(shù)據(jù)

2011-09-01 10:56:34

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

www.一区| 亚洲激情播播| 欧美肥胖老妇做爰| 精品黄色免费中文电影在线播放| 色域天天综合网| 黄色影院在线播放| 欧美福利视频一区| 99热99re6国产在线播放| 日韩av在线不卡| av在线日韩| 欧美精品一二区| 亚州综合一区| www.久久艹| 久久精品99国产精品日本| 日本一本草久p| 久久亚洲私人国产精品va媚药| 99色精品视频| 亚洲国产中文字幕在线视频综合| 亚洲成人套图| 亚洲第一网中文字幕| 日韩国产91| 国产精品久久久久久久久久新婚| 欧美在线免费一级片| 色噜噜一区二区| av网站一区二区三区| 橘梨纱av一区二区三区在线观看| 日本久久一区二区| 波多野一区二区| 欧美理论电影在线播放| 日韩精品首页| 手机成人av在线| 一区二区三区在线免费| 国产激情小视频在线| 乱亲女秽乱长久久久| 亚洲理论电影网| 国产精品久久久久久久久电影网| 一区二区三区资源| 亚洲大胆人体大胆做受1| 九九久久综合网站| 精品91在线| 妓院一钑片免看黄大片| 欧美日韩一区视频| 日本免费一区二区三区视频| av日韩中文字幕| 久久综合色婷婷| 视频一区二区三区不卡| 久久99久久久久久久噜噜 | 伊人久久综合97精品| 天天做夜夜做人人爱精品 | 青青草国产精品97视觉盛宴| 91视频免费版污| 日韩亚洲欧美高清| 秋霞影视一区二区三区| 午夜精品视频在线观看一区二区| 国产精品免费人成网站| 俺来也官网欧美久久精品| 91福利视频在线观看| 日韩av在线播放中文字幕| av高清资源| 在线观看精品国产视频| 国产综合自拍| 四虎永久在线高清国产精品| 亚洲国产中文字幕久久网| 精品国内自产拍在线观看视频 | 国产一区高清在线| 青青国产在线| 国模精品视频一区二区| 精品亚洲国产成人av制服丝袜| 小草av在线播放| 97在线免费观看视频| 国产在线播放一区| 蜜桃视频在线观看免费视频网站www| 国内外成人免费激情在线视频网站 | 黄色成人在线免费观看| 精品美女视频在线观看免费软件 | 日本中文字幕电影| 1024国产在线| 小说区图片区色综合区| 精品制服美女丁香| 欧美本精品男人aⅴ天堂| 亚洲欧美综合另类中字| 欧美最顶级的aⅴ艳星| 国产成人在线亚洲欧美| 亚洲最大av网站| 亚洲在线www| 成人激情免费在线| 亚洲影院在线看| 欧美极品视频一区二区三区| 日韩第一页在线观看| 天堂av网在线| 日韩美女网站| www.51av欧美视频| 欧洲福利电影| 日韩毛片在线免费观看| 国内精品久久久久久| av免费观看网| 亚洲一区导航| wwwwxxxxx欧美| 日韩性生活视频| 亚洲欧美制服综合另类| 免费av在线一区二区| 91亚洲天堂| 日韩精品高清不卡| 欧美亚洲动漫制服丝袜| 99久久久久国产精品免费| 91福利免费在线| 午夜久久99| 99精品国产热久久91蜜凸| 国产成人啪午夜精品网站男同| 国产91高潮流白浆在线麻豆 | 欧美大陆一区二区| 先锋影音男人资源| 日本按摩中出| 黄视频免费在线看| 九九免费精品视频在线观看| 奇米影视一区二区三区| 一本久久综合亚洲鲁鲁五月天| 国产ts一区二区| 捆绑紧缚一区二区三区在线观看| 国产乱码精品一区二区三区四区| 琪琪一区二区三区| 粉嫩一区二区三区性色av| 精品国产凹凸成av人导航| 2020国产精品视频| 亚洲综合视频一区| 精品国产电影一区二区| 欧美最猛性xxxxx免费| 2018高清国产日本一道国产| 加勒比色老久久爱综合网| 国产精品一卡二卡在线观看| 一色桃子久久精品亚洲| 国模私拍一区二区三区| 免费看成人a| 中文久久精品| 精品国产一区二区三区在线观看| 日韩免费高清在线| jvid福利在线一区二区| 欧美一区二区啪啪| 亚洲欧美在线精品| 日韩福利电影在线| 色老头一区二区三区| 日本国产在线| 日韩av午夜在线观看| 日韩在线小视频| xxxx影院| 亚洲激情精品| 日韩最新中文字幕电影免费看| 亚洲日本理论电影| 欧美久久精品| 日韩女优电影在线观看| 日韩精品一区二区在线视频 | 蜜乳av一区二区| 日韩一级黄色大片| 免费看av软件| 97在线精品| 欧美成人中文字幕在线| 成人在线视频亚洲| 久久精品一区二区三区不卡牛牛| 国产伦精品一区二区三区高清版| 日韩一区二区三区高清在线观看| 在线亚洲人成电影网站色www| 中文字幕乱码人妻综合二区三区| 国产精品videosex极品| 久久视频在线播放| 成人黄动漫网站| 国产宾馆实践打屁股91| 国产精品999999| 青春草免费在线视频| 狠狠操狠狠色综合网| x88av蜜桃臀一区二区| 国产欧美日韩亚洲一区二区三区| 成人嘿咻视频免费看| 欧美福利视频在线| 欧美a一级片| 国产午夜精品全部视频在线播放 | 国产亚洲成av人片在线观黄桃| 欧美成人猛片aaaaaaa| 国产66精品久久久久999小说| 视频在线一区| 欧美国产精品va在线观看| av老司机在线观看| 欧美一级免费观看| 韩国成人二区| 91精选在线观看| 欧美女v视频| 亚洲高清不卡在线| 国产毛片av在线| 日韩欧美999| 亚洲免费视频一区二区三区| 在线精品视频一区二区三四| 黄页网站视频在线观看| 亚洲一区二区综合| 蜜桃免费在线| 亚洲激情小视频| 亚洲七七久久综合桃花剧情介绍| 日韩欧美高清在线| 欧美黄色网页| 欧美激情在线观看视频| 国产日产一区 | 亚洲国产精品影院|