Android SQLite数据库优化及注意事项

数据库使用优化及注意事项

数据库简介

后台数据库一般是MySQL 、Oracle 、SQL Server ,而Android 中的数据库是SQLite。今天要说的主要是SQLite在使用中的一些注意事项以及问题。
问题来源:公司有个项目,是用于石油炼化工厂巡检使用。就是录入所有巡检过程中的数据,上传至服务器,同时保存在本地。安卓中,本地数据库使用一般要么就是自己新建数据,继承Android自带的SQLiteHelper。第二种就是外面创建好数据库,然后写入到Android 应用数据库目录下 data/data/packagename/databases/yourdb下。这个写入过程就是文件的读写。资料很多,不详细说。

使用问题

用数据库的时候,以前也不是很注意游标cursor关闭这个问题。测试也很难测出问题。直达后面工人巡检的时候,说程序直接崩溃。分析跟踪之后,才发现当数据量很多,cursor生成很多,用完不关闭,导致内存泄漏,从而导致程序崩溃。所以切记,cursor用完必须关闭。以绝后患!
第二个问题就是多线程操作SQLite数据库,多线程操作数据库,一般就两个问题。1、数据库锁定;2、数据库关闭时机:语句执行完就关还是最后关闭。因为SQLite数据库的锁是精确到数据库表级别的。所以在多线程环境下,目前确实没有好的办法。尤其是对于写操作,是无法完成并发的。所以后面对于写操作,我的做法是建立一个全局的单线程池。所有的写操作,都是同步执行。数据库关闭时机我建议还是程序退出的时候关闭,不然那中间需要不断的开启数据库,关闭数据库。当然如果对数据库操作不频繁,还是用完即关。对于频繁操作的,就不要一直开关了。

提高数据库速度

事务

事务这个是真的6,用法也很简单,在数据库操作的地方只需三个操作databse.beginTransaction();开始事务,databse.setTransactionSuccessful();操作执行成功。database.endTransaction();事务结束。别小看这几行代码,我测试了下,100条数据的插入速度几乎就能提高20倍。所以非常建议只要有几十条数据的数据库操作,强烈建议使用事务。会给程序性能上带来很大的提升。这也是这次开发中遇到的问题,工厂人反应慢的问题。他们每次提交多的时候有上千条数据。用事务后,能明显缩减等待时间。不过实际使用的时候,我觉得可能是SQLite 的本身性能问题。一个表存2万多条数据的时候,数据库操作明显要慢一些。

索引

网上很多提升速度的方法都是说索引。所谓索引,就好比一笔本的目录。看目录,我们就能知道具体的内容的页码。数据库中使用索引,也能快速定位到要查询的内容位置。而不是条条遍历。索引的缺点也是很明显的,所有对内容的改动,都需要更新一次目录,而且需要占用一定的内存,不过几乎介可以忽略了。所以,索引主要在查询这块能提升速度。对于索引的使用以及索引的规则,可以看下菜鸟教程或者博客

总结

数据库使用虽然简单,可是还是需要注意一些细节问题。cursor需要用完就关等,速度方面,目前查找的也就只有添加索引以及事务。而且索引还不能随便使用。以上便是此次数据库使用过程中的小结。后续有使用数据库的问题,再续。感谢各位的肩膀。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章