1. 使用事務,將多條數據庫更改語句或者,循環遍歷語句放到一次事務中來處理。sql
SqliteDB::startTransaction();數據庫
do_CRUD;函數
MayBe: SqliteDB::RollBack();ui
SqliteDB::Commit();spa
2. 使用批處理執行參數爲集合類型的操做code
QVariantList bindValue1;sqlite
QVariantList bindValue2;進程
QString strSql = " delete from tablename where field1 = ? and field2 = ?"事務
QSqlquery sqlQuery.addbindValue(bindValue1);get
QSqlquery sqlQuery.addbindValue(bindValue2);
sqlQuery.queryBatch();
getResult();
3. 通常對於插入操做,要返回插入數據庫後,所在行的自增加序號ID, 或者自定義的某一列。後續流程會用到這個ID,來標記數據行。
兩種方式獲取插入自增加ID:
-select last_insert_rowid() as newID from TableName
select max(ID) from 表
還能夠放在事務一塊兒處理。
注意的是:
SQLiteAPI 函數sqlite3_last_insert_rowid()能夠取得最後一條插入的記錄的rowid。但sqlite3_last_insert_rowid()是基於當前進程的。也就是說,sqlite3_last_insert_rowid()取到的是當前進程最後一次插入記錄的rowid。對於不是當前進程插入的記錄,sqlite3_last_insert_rowi()均返回0。sqlite3_last_insert_rowi()對應的SQL聲明爲last_insert_rowid(),
操做例子:
bool SampleRecordDAO::updatePrintStatus(const QSet<int> &sampleIdSet, bool isPrint) { int sampleIdSize = sampleIdSet.size(); if (sampleIdSize <= 0) { return true; } QSqlQuery query(SqliteDbHelper::Instance()->getDB()); query.prepare("UPDATE SampleInfo SET ResultStatePrint = ? where ID = ? "); QVariantList stateList,idList; for (QSet<int>::const_iterator idItr = sampleIdSet.begin(); idItr != sampleIdSet.end(); ++idItr) { stateList << (int)isPrint; idList << *idItr; } query.addBindValue(stateList); query.addBindValue(idList); if (!query.execBatch()) { revDebug << query.lastError().text(); return false; } return true; }
bool SampleRecordDAO::deleteSampleInfoAbout4Ids(QList<int> sampleIds) { //1.Haven't Sample Id int sampleSize = sampleIds.size(); if (sampleSize <= 0) { return true; } //2.Build Sample Id List QVariantList idList; for (int sampleIdx = 0; sampleIdx < sampleSize; ++sampleIdx) { idList << sampleIds.at(sampleIdx); } //3.Delete DB SqliteDbHelper::Instance()->startTransaction(); QSqlQuery query(SqliteDbHelper::Instance()->getDB()); do { query.prepare("DELETE FROM SampleInfo WHERE ID = ? "); query.addBindValue(idList); if (!query.execBatch()) { break; } query.prepare("DELETE FROM SampleInfoOrg WHERE ID = ? "); query.addBindValue(idList); if (!query.execBatch()) { break; } query.prepare("DELETE FROM MicroscopyInfoTable WHERE ID = ? "); query.addBindValue(idList); if (!query.execBatch()) { break; } query.prepare("DELETE FROM SampleInforgraincountTable WHERE ID = ? "); query.addBindValue(idList); if (!query.execBatch()) { break; } SqliteDbHelper::Instance()->commit(); return true; } while(false); revDebug << query.lastError().text(); SqliteDbHelper::Instance()->rollback(); return false; }