当前位置:操作系统 > 安卓/Android >>

android数据库操作优化(一)

  这是我今年陆陆续续写的有关android上数据库操作的文章,以前都发布在开发论坛上,现在把整理到这里。
        1.由于SQLiteDatabase对象较为耗费资源,所以我们在使用完SQLiteDatabase对象之后,必须立即关闭它,避免它继续占用资源,否则我们继续程序可能会导致OOM或者其他异常;
 
        2.同理,我们在使用完cursor之后也应该立即关闭cursor,避免资源浪费;
 
        3.我们在关闭数据库之前,必须将取得的数据保存到Map或者List中,否则关闭数据库之后,数据也会随之消失;
 
        4.使用明确的查询语句,在数据库的查询中避免使用select * from table这样的语句,我们一般不会用到全部的数据,但这样查询不仅浪费时间,也浪费android有限的内存,所以我们必须明确查询目标,例如:select id,name from people;
 
        5.在较为频繁的数据库操作中(例如批量插入数据),可以使用数据库事物来处理频繁操作(如果只有一个数据操作,则android默认使用事物);
 
        6.在sqlite数据库中使用索引,给经常查询的列创建索引,但索引不适用于较大的数据库,较大的数据库创建索引会耗费太多的时间,而且每次改动一条数据,整个索引都将重新创建;
 
        7.如果需要在pc上制作数据库db文件,推荐使用Navicat Premium,功能强大,但是费用也很强大,不过可以免费试用;
 
        8.制作本地数据库db文件的时候,需要使用UTF-8编码(很多pc端sqlite3工具不支持utf-8编码或者保持和系统编码一致),否者在取数据的时候会出现乱码,另外,根据我们使用的pc数据库文件不同,我们可能会生成不同的sqlite3数据库的后缀文件,例如.s3db文件,这个其实没有影响,android数据库会识别它的,如果你感觉别扭,可以手动改为.db就可以了,这也是没关系的;
 
        9.制作本地数据库还有一点比较重要的就是默认主键必须为“_id”并设置为自动增长,不可以是其他的,而且每个表都必须有,如果你的数据库没有这个主键,在你的app运行中会报错,日志提示缺少“_id”字段,至于为什么应用内创建数据库不会产生这样的问题,那是因为android系统默认在创建数据库的时候就是为“_id”为主键的,即使你没有写这样的创建语句;
 
        10.还有好多人不知道怎么将mysql或者execl中的数据导入到sqlite3数据库中,这里我提供一个思路,可以将execl另存为csv文件,大部分数据库也可以直接到处csv格式的文件,然后我们用记事本打开csv文件就会发现里面就是inert into table values();可以直接放入values的部分,可以用java程序写一个批量插入语句即可制作sqlite3 db数据库文件;
 
        11.制作好的sqlite3 db数据库文件应该放在项目的assets文件夹或者res/raw文件夹中,然后在app启动的过程中将数据库用java io流复制到data/data/packagename/database目录中(注意,如果你的db数据库文件较大,请放在内存卡或者其他外存中);
 
        12.如果你不想自己在sd卡上面的数据库被普通文件浏览器(android)直接扫描到,可以在sd中新建一个文件夹,并以”.“开头,这样的文件夹会被大部分的文件浏览器过滤掉不显示;
 
        13.为了防止你的db数据库文件被其他有心人获取,你也可以将自己的数据库的后缀伪装成其他文件,例如.mp3,.dat之类的,但是需要注意的是,db文件会在应用打包生成apk的时候被压缩(可以有效减少apk的体积),如果是mp3之类的文件的话,则不会被压缩,经笔者测试,改为.dat格式也是可以被压缩的,或者将db文件复制到sd卡的时候再改名为其他后缀;
 
        14.如果数据库中的信息比较敏感,大家也可以在加密数据之后再存入数据库,取数据的时候在应用内解密,当然网上还有一些其他的加密手段,但是这些加密无一例外的都会牺牲掉更多相应时间和内存资源,所以大家在规划app的时候必须自己考虑清楚
补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,