Qt數(shù)據(jù)庫 利用QSqlQuery類執(zhí)行SQL語句 下篇
Qt數(shù)據(jù)庫 利用QSqlQuery類執(zhí)行SQL語句 下篇是本節(jié)介紹的內(nèi)容,接著上篇文章繼續(xù)講 Qt數(shù)據(jù)庫 利用QSqlQuery類執(zhí)行SQL語句 中篇,先來看內(nèi)容。
三,批處理操作。
當要進行多條記錄的操作時,我們就可以利用綁定進行批處理??聪旅娴睦印?/p>
- void Widget::on_pushButton_clicked()
- {
- QSqlQuery q;
- q.prepare(“insert into student values (?, ?)”);
- QVariantList ints;
- ints << 10 << 11 << 12 << 13;
- q.addBindValue(ints);
- QVariantList names;
- names << “xiaoming” << “xiaoliang” << “xiaogang” << QVariant(QVariant::String);
- //***一個是空字符串,應與前面的格式相同
- q.addBindValue(names);
- if (!q.execBatch()) //進行批處理,如果出錯就輸出錯誤
- qDebug() << q.lastError();
- //下面輸出整張表
- QSqlQuery query;
- query.exec(“select * from student”);
- while(query.next())
- {
- int id = query.value(0).toInt();
- QString name = query.value(1).toString();
- qDebug() << id << name;
- }
- }
然后在widget.cpp文件中添加頭文件 #include <QSqlError> 。
我們在程序中利用列表存儲了同一屬性的多個值,然后進行了值綁定。***執(zhí)行execBatch()函數(shù)進行批處理。注意程序中利用QVariant(QVariant::String)來輸入空值NULL,因為前面都是QString類型的,所以這里要使用QVariant::String 使格式一致化。
運行效果如下:
四,事務操作。
事務是數(shù)據(jù)庫的一個重要功能,所謂事務是用戶定義的一個數(shù)據(jù)庫操作序列,這些操作要么全做要么全不做,是一個不可分割的工作單位。在Qt中用transaction()開始一個事務操作,用commit()函數(shù)或rollback()函數(shù)進行結束。commit()表示提交,即提交事務的所有操作。具體地說就是將事務中所有對數(shù)據(jù)庫的更新寫回到數(shù)據(jù)庫,事務正常結束。rollback()表示回滾,即在事務運行的過程中發(fā)生了某種故障,事務不能繼續(xù)進行,系統(tǒng)將事務中對數(shù)據(jù)庫的所有已完成的操作全部撤銷,回滾到事務開始時的狀態(tài)。
如下面的例子:
- void Widget::on_pushButton_clicked()
- {
- if(QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions))
- { //先判斷該數(shù)據(jù)庫是否支持事務操作
- QSqlQuery query;
- if(QSqlDatabase::database().transaction()) //啟動事務操作
- {
- //
- //下面執(zhí)行各種數(shù)據(jù)庫操作
- query.exec(“insert into student values (14, ‘hello’)”);
- query.exec(“delete from student where id = 1″);
- //
- if(!QSqlDatabase::database().commit())
- {
- qDebug() << QSqlDatabase::database().lastError(); //提交
- if(!QSqlDatabase::database().rollback())
- qDebug() << QSqlDatabase::database().lastError(); //回滾
- }
- }
- //輸出整張表
- query.exec(“select * from student”);
- while(query.next())
- qDebug() << query.value(0).toInt() << query.value(1).toString();
- }
- }
然后在widget.cpp文件中添加頭文件 #include <QSqlDriver> 。
QSqlDatabase::database()返回程序前面所生成的連接的QSqlDatabase對象。hasFeature()函數(shù)可以查看一個數(shù)據(jù)庫是否支持事務。
運行結果如下:
可以看到結果是正確的。
對SQL語句我們就介紹這么多,其實Qt中提供了更為簡單的不需要SQL語句就可以操作數(shù)據(jù)庫的方法,我們在下一節(jié)講述這些內(nèi)容。本文章原創(chuàng)于www.yafeilinux.com
小結:Qt數(shù)據(jù)庫 利用QSqlQuery類執(zhí)行SQL語句 下篇的內(nèi)容介紹完了,希望本文對你有所幫助!更多關于數(shù)據(jù)庫的操作請看編輯推薦。