成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Qt數(shù)據(jù)庫 QSqlQueryModel實(shí)例操作 上篇

移動(dòng)開發(fā)
本文介紹的是Qt數(shù)據(jù)庫 QSqlQueryModel實(shí)例操作 上篇,主要介紹QSqlQueryModel類的使用方法,先來看內(nèi)容!

Qt數(shù)據(jù)庫 QSqlQueryModel實(shí)例操作 上篇是本文要介紹內(nèi)容中一節(jié),分為上下篇。在上一篇的***我們說到,Qt中使用了自己的機(jī)制來避免使用SQL語句,它為我們提供了更簡單的數(shù)據(jù)庫操作和數(shù)據(jù)顯示模型。它們分別是只讀的QSqlQueryModel,操作單表的QSqlTableModel和以及可以支持外鍵的QSqlRelationalTableModel。這次我們先講解QSqlQueryModel

QSqlQueryModel類為SQL的結(jié)果集提供了一個(gè)只讀的數(shù)據(jù)模型,下面我們先利用這個(gè)類進(jìn)行一個(gè)最簡單的操作。

我們新建Qt4 Gui Application工程,我這里工程名為queryModel ,然后選中QtSql模塊,Base class選QWidget。工程建好后,添加C++ Header File ,命名為database.h,更改其內(nèi)容如下:

  1. #ifndef DATABASE_H  
  2.  
  3. #define DATABASE_H  
  4.  
  5. #include <QSqlDatabase> 
  6. #include <QSqlQuery> 
  7.  
  8. static bool createConnection()  
  9. {  
  10.     QSqlDatabase db = QSqlDatabase::addDatabase(“QSQLITE”);  
  11.     db.setDatabaseName(“database.db”);  
  12.     if(!db.open()) return false;  
  13.     QSqlQuery query;  
  14.     query.exec(“create table student (id int primary key, name vchar)”);  
  15.     query.exec(“insert into student values (0,’yafei0′)”);  
  16.     query.exec(“insert into student values (1,’yafei1′)”);  
  17.     query.exec(“insert into student values (2,’yafei2′)”);  
  18.     return true;  
  19. }  
  20. #endif // DATABASE_H 

這里我們使用了db.setDatabaseName(“database.db”); ,我們沒有再使用以前的內(nèi)存數(shù)據(jù)庫,而是使用了真實(shí)的文件,這樣后面對數(shù)據(jù)庫進(jìn)行的操作就能保存下來了。

然后進(jìn)入main.cpp,將其內(nèi)容更改如下:

  1. #include <QtGui/QApplication> 
  2. #include “widget.h”  
  3. #include “database.h”  
  4. int main(int argc, char *argv[])  
  5. {  
  6.     QApplication a(argc, argv);  
  7.     if(!createConnection())  
  8.         return 1;  
  9.     Widget w;  
  10.     w.show();  
  11.     return a.exec();  

下面我們在widget.ui中添加一個(gè)顯示為“查詢”的Push Button,并進(jìn)入其單擊事件槽函數(shù),更改如下:

  1. void Widget::on_pushButton_clicked()  
  2. {  
  3.     QSqlQueryModel *model = new QSqlQueryModel;  
  4.     model->setQuery(“select * from student”);  
  5.     model->setHeaderData(0, Qt::Horizontal, tr(“id”));  
  6.     model->setHeaderData(1, Qt::Horizontal, tr(“name”));  
  7.     QTableView *view = new QTableView;  
  8.     view->setModel(model);  
  9.     view->show();  

我們新建了QSqlQueryModel類對象model,并用setQuery()函數(shù)執(zhí)行了SQL語句“(“select * from student”);”用來查詢整個(gè)student表的內(nèi)容,可以看到,該類并沒有完全避免SQL語句。然后我們設(shè)置了表中屬性顯示時(shí)的名字。***我們建立了一個(gè)視圖view,并將這個(gè)model模型關(guān)聯(lián)到視圖中,這樣數(shù)據(jù)庫中的數(shù)據(jù)就能在窗口上的表中顯示出來了。

我們在widget.cpp中添加頭文件:

  1. #include <QSqlQueryModel> 
  2. #include <QTableView> 

我們運(yùn)行程序,并按下“查詢”按鍵,效果如下:

Qt數(shù)據(jù)庫 QSqlQueryModel實(shí)例操作 上篇

我們在工程文件夾下查看數(shù)據(jù)庫文件:

Qt數(shù)據(jù)庫 QSqlQueryModel實(shí)例操作 上篇

下面我們利用這個(gè)模型來操作數(shù)據(jù)庫。

1.我們在void Widget::on_pushButton_clicked()函數(shù)中添加如下代碼:

  1. int column = model->columnCount(); //獲得列數(shù)  
  2. int row = model->rowCount();    // 獲得行數(shù)  
  3. QSqlRecord record = model->record(1); //獲得一條記錄  
  4. QModelIndex index = model->index(1,1);   //獲得一條記錄的一個(gè)屬性的值  
  5. qDebug() << “column num is:” << column << endl 
  6.             << “row num is:” << row << endl 
  7.             <<”the second record is:” << record << endl 
  8.             << “the data of index(1,1) is:”<< index.data(); 

在我們在widget.cpp中添加頭文件:

  1. #include <QSqlRecord> 
  2. #include <QModelIndex> 
  3. #include <QDebug> 

此時(shí)運(yùn)行程序,效果如下:

Qt數(shù)據(jù)庫 QSqlQueryModel實(shí)例操作 上篇

2.當(dāng)然我們在這里也可以使用前面介紹過的query執(zhí)行SQL語句。

例如我們在void Widget::on_pushButton_clicked()函數(shù)中添加如下代碼:

  1. QSqlQuery query = model->query();  
  2. query.exec(“select name from student where id = 2 “);  
  3. query.next();  
  4. qDebug() << query.value(0).toString(); 

這樣就可以輸出表中的值了,你可以運(yùn)行程序測試一下。

3.當(dāng)我們將函數(shù)改為如下。

  1. void Widget::on_pushButton_clicked()  
  2. {  
  3.     QSqlQueryModel *model = new QSqlQueryModel;  
  4.     model->setQuery(“select * from student”);  
  5.     model->setHeaderData(0, Qt::Horizontal, tr(“id”));  
  6.     model->setHeaderData(1, Qt::Horizontal, tr(“name”));  
  7.     QTableView *view = new QTableView;  
  8.     view->setModel(model);  
  9.     view->show();  
  10.  
  11.     QSqlQuery query = model->query();  
  12.     query.exec(“insert into student values (10,’yafei10′)”);  
  13.     //插入一條記錄  

這時(shí)我們運(yùn)行程序,效果如下:

Qt數(shù)據(jù)庫 QSqlQueryModel實(shí)例操作 上篇

我們發(fā)現(xiàn)表格中并沒有增加記錄,怎么回事呢?

我們關(guān)閉程序,再次運(yùn)行,效果如下:

Qt數(shù)據(jù)庫 QSqlQueryModel實(shí)例操作 上篇

發(fā)現(xiàn)這次新的記錄已經(jīng)添加了。在上面我們執(zhí)行了添加記錄的SQL語句,但是在添加記錄之前,就已經(jīng)進(jìn)行顯示了,所以我們的更新沒能動(dòng)態(tài)的顯示出來。為了能讓其動(dòng)態(tài)地顯示我們的更新,我們可以將函數(shù)更改如下:

  1. void Widget::on_pushButton_clicked()  
  2. {  
  3.     QSqlQueryModel *model = new QSqlQueryModel;  
  4.     model->setQuery(“select * from student”);  
  5.     model->setHeaderData(0, Qt::Horizontal, tr(“id”));  
  6.     model->setHeaderData(1, Qt::Horizontal, tr(“name”));  
  7.     QTableView *view = new QTableView;  
  8.     view->setModel(model);  
  9.     view->show();  
  10.     QSqlQuery query = model->query();  
  11.     query.exec(“insert into student values (20,’yafei20′)”);  
  12.     //插入一條記錄  
  13.    model->setQuery(“select * from student”); //再次查詢整張表  
  14.     view->show(); //再次進(jìn)行顯示,這句也可以不寫  

這時(shí)運(yùn)行程序,效果如下

Qt數(shù)據(jù)庫 QSqlQueryModel實(shí)例操作 上篇

可以看到,這時(shí)已經(jīng)將新添的記錄顯示出來了。

小結(jié):Qt數(shù)據(jù)庫 QSqlQueryModel實(shí)例操作 上篇的內(nèi)容介紹完了,想要更深入了解的話,請參考 Qt數(shù)據(jù)庫 QSqlQueryModel實(shí)例操作 下篇。希望本節(jié)內(nèi)容能夠幫你解決問題!

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

2011-06-27 13:49:43

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

2011-07-05 14:46:34

2011-07-05 18:04:45

QT Mysql

2011-07-05 10:16:16

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

2011-06-21 15:48:41

2011-06-21 15:11:04

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

2011-07-01 10:55:25

Qt 登陸窗口 界面

2011-06-27 14:17:35

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

2011-07-05 16:08:10

2011-08-30 14:25:06

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

2011-06-27 12:56:28

2011-07-01 13:42:24

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

2011-07-05 18:11:13

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

2011-03-30 09:07:46

數(shù)據(jù)庫

2009-08-19 16:30:55

C#操作Access數(shù)

2011-07-26 18:11:56

iPhone Sqlite 數(shù)據(jù)庫

2011-07-19 10:42:41

iPhone 應(yīng)用程序 模型

2021-04-12 10:00:47

Sqlite數(shù)據(jù)庫CMD

2011-07-07 16:42:38

iPhone Sqlite3 數(shù)據(jù)庫
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 亚洲成人一区二区三区 | 视频1区 | 亚洲精品欧美一区二区三区 | 免费视频一区二区 | 精品国产一区二区三区性色av | 日韩精品一区二区三区在线 | 国色天香成人网 | 韩国主播午夜大尺度福利 | 成人免费视频网站在线看 | 91在线视频国产 | 视频在线观看亚洲 | 日韩欧美专区 | 久久精品毛片 | 四虎影院欧美 | 亚洲综合在线一区 | 亚洲三区在线观看 | 欧美电影大全 | 青青草原综合久久大伊人精品 | 国产精品视频一二三 | 日韩视频区 | 午夜影院在线观看免费 | 精品中文字幕一区二区 | 午夜视频免费在线观看 | 狠狠干2020| 成人精品视频在线观看 | 色精品视频 | 国产精品成人久久久久 | 免费啪啪 | 91精品国产91久久综合桃花 | yeyeav| 在线欧美亚洲 | 国产视频三级 | 国产精品久久久久久久久久不蜜臀 | 无码一区二区三区视频 | 亚洲欧美日韩在线不卡 | 精品日韩电影 | 大香网伊人 | 久久久区 | 国产精品网址 | 北条麻妃一区二区三区在线观看 | 91九色网站 |