QT運算元據庫

2022-03-14 14:48:46 字數 4870 閱讀 5275

qsqldatabase db = qsqldatabase::adddatabase("qmysql");

db.sethostname("localhost");

db.setdatabasename("test");

db.setusername("root");

db.setpassword("******");

bool ok = db.open();

qsqldatabase db = qsqldatabase::adddatabase("qsqlite");

4.select操作

qsqlquery query;

int numrows;

query.exec("select * from scores order by id asc");

while (query.next())

else

}

5.insert操作

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

qsqlquery query;

query.exec("insert into employee (id, name, salary) values (1001, 』thad beaumont』, 65000)");

(2)通過「:字段」操作

qsqlquery query;

query.prepare("insert into employee (id, name, salary) values (:id, :name, :salary)");

query.bindvalue(":id", 1001);

query.bindvalue(":name", "thad beaumont");

query.bindvalue(":salary", 65000);

query.exec();

(3)通過「?」操作

qsqlquery query;

query.prepare("insert into employee (id, name, salary) values (?, ?, ?)");

query.addbindvalue(1001);

query.addbindvalue("thad beaumont");

query.addbindvalue(65000);

query.exec();

6.update操作

qsqlquery query;

query.exec("update employee set salary = 70000 where id = 1003");

7.delete操作

qsqlquery query;

query.exec("delete from employee where id = 1007");

8.transaction()操作

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

//database為qsqldatabase物件

if(database.driver()->hasfeature(qsqldriver::transactions))//測試資料庫是否支援transactions,

database.commit();

}

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

9.使用sql model類

qsqlquerymodel——乙個唯讀的讀取資料庫資料的模型

qsqltablemodel——乙個可讀寫的單一**模型,能不用寫sql語句

qsqlrelationaltablemodel——qsqltablemodel的乙個子類

這些類都繼承於qabstracttablemodel,而他們又都繼承於qabstractitemmodel

(1) qsqlquerymodel的使用

qsqlquerymodel querymodel;

querymodel.setquery("select * from scores order by id asc");

for (num=0;numquerymodel.rowcount();num++)

label->settext(str);

(2) qsqltablemodel的使用

① 讀取資料

qsqltablemodel tablemodel;

tablemodel.settable("scores");

tablemodel.setfilter("id > 10");

tablemodel.setsort(0,qt::descendingorder);

tablemodel.select();

for (num=0;numtablemodel.rowcount();num++)

label->settext(str);

② 修改資料

qsqltablemodel tablemodel;

tablemodel.settable("scores");

tablemodel.setfilter("id > 10");

tablemodel.setsort(0,qt::descendingorder);

tablemodel.select();

for (num=0;numtablemodel.rowcount();num++)

if(tablemodel.submitall())

label->settext("修改成功!");

else

label->settext("修改失敗!");

或能用setdata()來修改,**如下:

qsqltablemodel tablemodel;

tablemodel.settable("scores");

tablemodel.setfilter("id > 10");

tablemodel.setsort(0,qt::descendingorder);

tablemodel.select();

tablemodel.setdata(tablemodel.index(2,1),"data修改");

if(tablemodel.submitall())

label->settext("修改成功!");

else

label->settext("修改失敗!");

③ 刪除資料

tablemodel.removerows(row, 5);

//removerows()第乙個引數為要刪除的第一行的行數,第二個引數為要刪除的總行數;

tablemodel.submitall();

//注意,利用qsqltablemodel修改或刪除資料,最後都要使用submitall()執行更改

④ 插入資料

qsqlrecord record = tablemodel.record();

record.setvalue("name","插入的");

tablemodel.insertrecord(2,record);

//注意,此處插入利用insertrecord()函式,該函式第乙個引數為插入到tablemodel的第幾行,第二個引數為記錄,注意這裡的記錄一 定要和tablemodel中的記錄匹配,故qsqlrecord record = tablemodel.record();另外,插入操作不用submitall(),因為,insertrecord()返回bool值。

10.使用qtableview

開頭處要使用#include

qtableview *view = new qtableview();

view->setmodel(&model);

view->setedittriggers(qabstractitemview::noedittriggers);

view->show();

Qt運算元據庫

qt運算元據庫其實不難,只要連線成功資料庫,寫對sql語句就行。連線資料庫可參照 簡單的在程式中寫死的sql語句寫法如下 qsqlquery query query.exec insert into tablename id,name values 001,test 先構造乙個qsqlquery的物...

Qt之運算元據庫(SQLite)

qtsql模組提供了與平台以及資料庫種類無關的訪問sql資料庫的介面,這個介面由利用qt的模型檢視結構將資料庫與使用者介面整合的一套類來支援。驅動程式 資料庫 qdb2 ibm db27.1版以及更新的版本 qibase borlandinterbase qmysql mysql qoci 甲骨文公...

QT 運算元據庫SQLite例項

include widget.h qsqlquery query dbconn 以下執行相關qsl語句 新建student表,id設定為主鍵,還有乙個name項 query.exec create table student id varchar,name varchar query.exec qo...