博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
论述-Sqlite3 开发优化
阅读量:6442 次
发布时间:2019-06-23

本文共 2978 字,大约阅读时间需要 9 分钟。

hot3.png

1. 使用事务,将多条数据库更改语句或者,循环遍历语句放到一次事务中来处理。

     SqliteDB::startTransaction();

         do_CRUD;

         MayBe: SqliteDB::RollBack();

     SqliteDB::Commit();

 

2. 使用批处理执行参数为集合类型的操作

   QVariantList    bindValue1;

  QVariantList     bindValue2;

 QString   strSql = " delete from tablename where  field1 = ? and field2 = ?"

  QSqlquery sqlQuery.addbindValue(bindValue1);

  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
&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
::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
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;}

 

 

转载于:https://my.oschina.net/u/185531/blog/1786098

你可能感兴趣的文章
BFS 2015百度之星初赛2 HDOJ 5254 棋盘占领
查看>>
LeetCode 3
查看>>
活灵活现用 Git --基础篇
查看>>
c++ 函数声明
查看>>
linux下,免密码登录
查看>>
街道管理
查看>>
hdu 3501 Calculation 2 (欧拉函数)
查看>>
csv2mysql
查看>>
可以免费下载视频素材和模板网站汇总
查看>>
生成包含数字和大小写字母的随机码
查看>>
前辈回顾15年程序员生涯,总结的7点经验
查看>>
WebView与 JS 交互方式
查看>>
Java提高篇——静态代码块、构造代码块、构造函数以及Java类初始化顺序
查看>>
【CT】四、Turing Machines(2)
查看>>
【matlab】plot
查看>>
Kafka生产者APi
查看>>
有关计算机组成的分享~
查看>>
梳理回顾
查看>>
基于开源Dubbo分布式RPC服务框架的部署整合
查看>>
用C#实现智能设备上的NotifyIcon类
查看>>