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

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

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

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

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

我們新建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”); ,我們沒(méi)有再使用以前的內(nèi)存數(shù)據(jù)庫(kù),而是使用了真實(shí)的文件,這樣后面對(duì)數(shù)據(jù)庫(kù)進(jìn)行的操作就能保存下來(lái)了。

然后進(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();  

下面我們?cè)趙idget.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類對(duì)象model,并用setQuery()函數(shù)執(zhí)行了SQL語(yǔ)句“(“select * from student”);”用來(lái)查詢整個(gè)student表的內(nèi)容,可以看到,該類并沒(méi)有完全避免SQL語(yǔ)句。然后我們?cè)O(shè)置了表中屬性顯示時(shí)的名字。***我們建立了一個(gè)視圖view,并將這個(gè)model模型關(guān)聯(lián)到視圖中,這樣數(shù)據(jù)庫(kù)中的數(shù)據(jù)就能在窗口上的表中顯示出來(lái)了。

我們?cè)趙idget.cpp中添加頭文件:

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

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

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

我們?cè)诠こ涛募A下查看數(shù)據(jù)庫(kù)文件:

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

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

1.我們?cè)趘oid 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(); 

在我們?cè)趙idget.cpp中添加頭文件:

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

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

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

2.當(dāng)然我們?cè)谶@里也可以使用前面介紹過(guò)的query執(zhí)行SQL語(yǔ)句。

例如我們?cè)趘oid 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)行程序測(cè)試一下。

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ù)庫(kù) QSqlQueryModel實(shí)例操作 上篇

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

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

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

發(fā)現(xiàn)這次新的記錄已經(jīng)添加了。在上面我們執(zhí)行了添加記錄的SQL語(yǔ)句,但是在添加記錄之前,就已經(jīng)進(jìn)行顯示了,所以我們的更新沒(méi)能動(dòng)態(tài)的顯示出來(lá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ù)庫(kù) QSqlQueryModel實(shí)例操作 上篇

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

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

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

2011-06-27 13:49:43

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

2011-07-05 14:46:34

2011-07-05 10:16:16

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

2011-07-05 18:04:45

QT Mysql

2011-06-21 15:48:41

2011-06-21 15:11:04

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

2011-07-01 10:55:25

Qt 登陸窗口 界面

2011-06-27 14:17:35

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

2011-07-05 16:08:10

2011-08-30 14:25:06

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

2011-06-27 12:56:28

2011-07-05 18:11:13

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

2011-07-01 13:42:24

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

2009-08-19 16:30:55

C#操作Access數(shù)

2011-07-26 18:11:56

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

2011-03-30 09:07:46

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

2011-07-07 16:42:38

iPhone Sqlite3 數(shù)據(jù)庫(kù)

2011-07-19 10:42:41

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

2010-05-19 16:31:38

MySQL數(shù)據(jù)庫(kù)
點(diǎn)贊
收藏

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