Qt數據庫 利用QSqlQuery類執行SQL語句 下篇
Qt數據庫 利用QSqlQuery類執行SQL語句 下篇是本節介紹的內容,接著上篇文章繼續講 Qt數據庫 利用QSqlQuery類執行SQL語句 中篇,先來看內容。
三,批處理操作。
當要進行多條記錄的操作時,我們就可以利用綁定進行批處理。看下面的例子。
- 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> 。
我們在程序中利用列表存儲了同一屬性的多個值,然后進行了值綁定。***執行execBatch()函數進行批處理。注意程序中利用QVariant(QVariant::String)來輸入空值NULL,因為前面都是QString類型的,所以這里要使用QVariant::String 使格式一致化。
運行效果如下:
四,事務操作。
事務是數據庫的一個重要功能,所謂事務是用戶定義的一個數據庫操作序列,這些操作要么全做要么全不做,是一個不可分割的工作單位。在Qt中用transaction()開始一個事務操作,用commit()函數或rollback()函數進行結束。commit()表示提交,即提交事務的所有操作。具體地說就是將事務中所有對數據庫的更新寫回到數據庫,事務正常結束。rollback()表示回滾,即在事務運行的過程中發生了某種故障,事務不能繼續進行,系統將事務中對數據庫的所有已完成的操作全部撤銷,回滾到事務開始時的狀態。
如下面的例子:
- void Widget::on_pushButton_clicked()
- {
- if(QSqlDatabase::database().driver()->hasFeature(QSqlDriver::Transactions))
- { //先判斷該數據庫是否支持事務操作
- QSqlQuery query;
- if(QSqlDatabase::database().transaction()) //啟動事務操作
- {
- //
- //下面執行各種數據庫操作
- 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()函數可以查看一個數據庫是否支持事務。
運行結果如下:
可以看到結果是正確的。
對SQL語句我們就介紹這么多,其實Qt中提供了更為簡單的不需要SQL語句就可以操作數據庫的方法,我們在下一節講述這些內容。本文章原創于www.yafeilinux.com
小結:Qt數據庫 利用QSqlQuery類執行SQL語句 下篇的內容介紹完了,希望本文對你有所幫助!更多關于數據庫的操作請看編輯推薦。