问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

android sqlite 对sqlite有哪些优化

发布网友 发布时间:2022-04-21 02:41

我来回答

2个回答

懂视网 时间:2022-04-30 15:23

//拿到数据库对象 2 SQLiteDatabase db = dbOpenHelper.getWritableDatabase(); 3 4 //开启事务 5 db.beginTransaction(); 6 7 try{ 8 9 //批量处理操作 10 11 //do something 12 13 db.execSQL("SQL语句", new Object[]{}); 14 15 db.execSQL("SQL语句", new Object[]{}); 16 17 //设置事务标志为成功,当结束事务时就会提交事务 18 19 db.setTransactionSuccessful(); 20 21 } 22 catch(Exception e){ 23 24 } 25 finally{ 26 //结束事务 27 db.endTransaction(); 28 }

 

代码仅供参考,

SQLite事务管理

标签:

热心网友 时间:2022-04-30 12:31

  关于 SQLite 的优化,首先是能用SQL语句的,就不要单笔操作,
Cursor 就更是能不用就不用。比如成批的
DELETE/UPDATE ,将条件组装到
SQL 语句,会比使用 CURSOR
一条条的查再删效率要高很多(
若干年前就曾使用存储过程代替单笔操作,将一次批量计算时间从一晚上缩到了一小时以内
)。其次是对操作的优化:对于 INSERT/UPDATE
操作较多时使用事务,如果SELECT操作较多时,使用索引。

  结合现在的工作,发现针对操作的优化,下面 这篇文章 可以翻译出来归档。以下为正文:

  SQLite 有一个简洁的SQL接口,且以低内存占用著称。现如今,
SQLite 已经在 Android 及
iOS 开发中得到广泛的应用。本文主要讨论在 Android
应用如何优化 SQLite 的性能和资源占用。

  1, 使用事务( Transaction )

  在默认情况下每一个SQL语句都被包一个全新的事务内,比如执行一个如INSERT这样基本的数据库操作,就会放到一个新创建的事务中执行。一次只需要操作一次数据库操作时,让SQLite自己来进行事务管理当然是明智的。但如果一次有大量的操作要做时,比如循环调用INSERT添加时,这样就显得开销过大了,因为每一笔操作都要重新打开、写入,最后再关闭journal文件,
这个文件是临时用来保存数据操作的中间结果,详细内容看这里( 参考 )。
  如果明确地在一系列SQL语句前后以 BEGIN TRANSACTION 及
END TRANSACTION
这样显示地使用事务就可以避免上面的情况。对于那些不会改变数据的操作,这样的方式也同样可以提速(好似数据库操作中单笔的操作效率将远低于批次操作,如果用SQL语句可以搞定的事,就不可使用Cursor进行操作)。

  注明:除了发起事务外,你必须还要负责对事务的提交和回滚操作。

  在Android应用开发中可以使用类似如下的方式使用 BEGIN TRANSACTION
及 END TRANSACTION :
  db.beginTransaction();
try{
for(int i =0; i< LENGTH ; i++,sequenceNum++)
{
// execute SQL
}
db.setTransactionSuccessful();// marks a commit
}
finally{
db.endTransaction();
}

  2. 使用索引

  如果没有在数据库使用索引,当你在一个没有排序的数据表中使用映射查询(projection
query)搜索时,无可避免的要执行一个全序列查找。这种情况通常并不是什么问题,每种数据库,包括SQLite都会为数据集执行索引来降低查找时间。

  索引维护着一个表中某一列或某几列的顺序,这样就可以快速定位到一组值,而不用扫遍全表。所有的索引信息会被保存在一个独立的索引表中,所以会产生额外的空间占用,不过绝对物超所值,特别是当你会在数据库中进行大量的读及搜索操作时。

  SQLite会自动为每一个UNIQUE栏位创建索引,包括主键(Primary Key)栏位,另外也可以通过CREATE
INDEX进行显示地创建。

  注:如果你的查询太复杂而无法使用所创建的索引,那你就要好好想想你数据库的结构了。
  3. 在Where分支中使用限定符

  如果以字串拼接出SQL语句的Where,莫不如使用SQLite的query操作带上'?'来编译查询。以下是它的好处:

  a. 有利于SQLite缓存这些查询。

  b. 可以避免达到SQLite缓存的上限。使用字串拼接Where的查询,每一个都被视为不同的查询,这就容易达到缓存的上限。

  c. 可以避免非法的SQL注入。
  转载
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
如何在手机百度上删除对话记录? 结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 黑龙江债权转让合同纠纷该怎样取证 安徽债权转让合同纠纷应该怎么样取证 关于android SQLite的问题 android连接sqlite数据库,怎么查询数据库里面的数据 安卓怎么使用sqlite数据库实例 如何解解析android的sqlite数据库的数据 android系统sqlite数据库文件怎么打开 android 怎么查看sqlite数据库 如何使用SQLite,Android上SQLite的最佳实践 android上如何使用sqlite数据库 在Android应用程序中使用SQLite数据库以及怎么用 android怎么连接sqlite数据库?。 如何在android中使用sqlite数据库 android怎么操作sqlite数据库 android 关于连接 sqlite问题 android怎么连接sqlite数据库? 怎么设置页眉随章节名变化啊 插入页眉如何使页次自动变 页眉页脚为什么改一个全改了? 设置页眉页脚怎么使改动一个其余自动更新 页眉页脚里的旧内容怎么全部替换新内容 404 Not Found android sqlite数据库的更新 android sqlite框架哪个好 oppo主题商店怎么自己设计主题 oppo手机主题商店 OPPO 主题商店里的主题皮肤购买后是不是永久的? 怎么在oppo主题商店里制作主题或字体? 苹果xr怎么设置其他铃声 切洋葱该怎样避免流泪 怎样切洋葱不刺眼? 如何在切洋葱时让眼睛不被熏到? 如何避免切洋葱流眼泪? 切洋葱时候很冲眼睛,怎么避免呢? 切洋葱时,怎样避免辣到眼睛? 怎样切洋葱,能够避免或者减少对眼睛的不适??? 切洋葱的时候怎样才能不辣眼睛 洋葱怎样切不撒眼 如何切洋葱不辣眼睛? 跪求各位大神火火兔G7给我分享一个免费百度云资源链接 火火兔g7早教机怎么样? 跪求火火兔G7的资源链接,哪位好心人给我分享个地址呗