SQL模型類 QSqlTableModel模型

2021-06-08 21:45:58 字數 4253 閱讀 2726

qsqltablemodel類繼承至qsqlquerymodel類,該類提供了乙個可讀寫單張sql表的可編輯資料模型,功能:修改,插入,刪除,查詢,和排序

常用函式

qvariantheaderdata ( intsection,qt::orientation

orientation, introle= qt::displayrole ) const 獲取水平頭或垂直頭標題

bool setheaderdata ( intsection,qt::orientation

orientation, constqvariant&value, introle= qt::editrole ) 設定水平頭或垂直頭標題

int rowcount ( constqmodelindex&parent= qmodelindex() ) const // 返回行數

int columncount ( constqmodelindex&index= qmodelindex() ) const // 返回列數

virtual bool removecolumns ( int column, int count, const qmodelindex & parent = qmodelindex() ) //model->removecolumns (0)刪除第一列

bool qsqltablemodel::submitall (),//提交所有被修改的資料,然後修改的資料被儲存在資料庫中

void qsqltablemodel::revertall () //撤銷所有的修改,如果資料庫已經被提交了修改,就不能通過撤銷修改改回來了

virtual void revertrow ( int row ) //恢復指定行的改變

void qsqltablemodel::setfilter ( const qstring & filter ) //篩選,按照字串filter對資料庫進行篩選,相當於sql中的where語句

bool qsqltablemodel::select () //在篩選和排序的條件下,將資料庫中符合要求的在mode**中顯示出來

void qsqltablemodel::setsort ( int column, qt::sortorder order ) //排序操作。按照列和qt::sortorder排序。qt::sortorder有公升序和降序

bool insertrow ( int row, const qmodelindex & parent = qmodelindex() ) //插入行

bool insertcolumn ( intcolumn, constqmodelindex&parent= qmodelindex() ) // 插入列

model->seteditstrategy(qsqltablemodel::onmanualsubmit); //設定儲存策略為手動提交

一、在qtableview中顯示資料庫中表的資料

qsqltablemodel *model = new qsqltablemodel(parentobject, database); // 摘抄自幫助文件

model->settable("employee");

model->seteditstrategy(qsqltablemodel::onmanualsubmit);

model->select();

model->removecolumn(0); // don't show the id

model->setheaderdata(0, qt::horizontal, tr("name"));

model->setheaderdata(1, qt::horizontal, tr("salary"));

qtableview *view = new qtableview;

view->setmodel(model);

view->show();

二、修改qtableview中資料後的提交,加入事務處理

model->database().transaction(); //開始事務操作

if (model->submitall()) // 提交所有被修改的資料到資料庫中

else

model->revertall(); //撤銷修改

三、查詢操作

相當於sql語句:select * from 表名 where name = "name變數"

model->setfilter(qobject::tr(「name = 『%1′」).arg(name)); //根據姓名進行篩選

model->select(); //顯示結果

for (int i = 0; i < model.rowcount(); ++i)

// 在操作大資料集時,建議通過索引指定字段

int primarykeyindex = model.record().indexof("id");

for (int i = 0; i < model.rowcount(); ++i)

四、排序操作

model->setsort(0,qt::ascendingorder); //id屬性,即第0列,公升序排列,qt::descendingorder為降序排序

model->select();

五、插入操作

int rownum = model->rowcount(); //獲得表的行數

int id = 最後乙個id+1;

model->insertrow(rownum); //新增一行,或者用insertrows(0,1),在0行新增1條記錄,根據表的排序規則,可能移到與指定行不同的行位置上

model->setdata(model->index(rownum,0),id); //因為這裡設定了id為主鍵,所以必須給新行新增id屬性值,id欄位在第0列上

model->submitall(); //可以直接提交

六、刪除一條記錄

首先要定位到待刪除的行上

model.setfilter("id = 10");

model.select();

if (model.rowcount() == 1)

在qtableview中刪除選中的一行

int currow = tableview->currentindex().row();

model->removerow(currow); //刪除一行

在qtableview中刪除選中的多行

qabstractitemview::selectionmodeselectionmode()const // 原型

qmodelindexlistqitemselectionmodel::selectedindexes()const //原型

qitemselectionmodel *selections = tableview->selectionmodel(); //返回當前的選擇模式

qmodelindexlist selecteds = selections->selectedindexes(); //返回所有選定的模型專案索引列表

foreach (qmodelindex index, selecteds)

int ok = qmessagebox::warning(this,tr("刪除選中的行!"),tr("你確定刪除當前選取中的行嗎?"),qmessagebox::yes,qmessagebox::no);

if(ok == qmessagebox::yes)

else

七、更新記錄

必須先定位記錄

model.setfilter("id = 10");

model.select();

if (model.rowcount() == 1)

可以看到這個模型很強大,而且完全脫離了sql語句,就算你不怎麼懂資料庫,也可以利用它進行大部分常用的操作。這個模型提供了緩衝區,可以將所有修改先 儲存到model中,只有當我們執行提交修改後,才會真正寫入資料庫。當然這也是因為我們在最開始設定了它的儲存策略:

model->seteditstrategy(qsqltablemodel::onmanualsubmit);

onmanualsubmit表明我們要提交修改才能使其生效。可以先將修改儲存起來,當我們執行提交函式時,再去真正地修改資料庫。當然,這個模型比前面的模型更高階,前面講的所有操作,在這裡都能執行。

SQL 關係模型

主鍵是關係表中記錄的唯一標識。主鍵的選取 主鍵不要帶有業務含義,而應該使用bigint自增或者guid型別。主鍵也不應該允許null。idclass id name other columns 11 小明 21 小紅 52 小白 在students表中,通過class id的字段,可以把資料與另一張...

定義模型類

建立應用booktest,在models.py 檔案中定義模型類。from django.db import models 定義圖書模型類bookinfo class bookinfo models.model btitle models.charfield max length 20,verbos...

關係模型和SQL

為了介紹關係模型,以mysql資料庫為例.安裝mariadb sql是結構化查詢語言structured query language.1987年被iso組織標準化.所有主流的關係型資料庫都支援sql,nosql也有很大一部分支援sql.sql語句分為 語言規範 sql語句大小寫不敏感 sql語句末...