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...