欢迎来到天天文库
浏览记录
ID:57609468
大小:35.55 KB
页数:5页
时间:2020-08-28
《Android面试之SQLite数据库.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Android面试之SQLite数据库 鹭岛厦门是个很美丽的海滨城市,给我的感觉很舒适和悠闲,据说政府对到那工作的高新技术人才第一年有10万元的奖励,因为这个原因我很有兴趣的参加了一个厦门公司的面试。他们主要是研发VOIP方面的技术,对手机应用的性能优化和音频算法有较高的要求。 他们招人的薪资半年内涨了30万元,都一直都没有招到合适的人。为什么呢?因为他们要求技术好的同时,英语也要好。什么才叫好呢?就是可以用流利的英语和国外的团队无障碍交流。 这就为难很多程序员了。这里就不再讲英语的励志故事了,我们回到技术面试上。厦门这家
2、公司对技术的要求还是比较高,问了很多对Android机制的理解问题,为什么面试官很在意对机制的理解呢?因为实际的项目中很多性能问题都是由于缺乏对Android运行机制的正确理解的程序员引发的。除了机制问题,现在印象比较深的就是关于SQLite数据库操作的性能优化问题。 面试题:如何对SQLite数据库中进行大量的数据插入? Android系统内置了SQLite数据库,并且提供了一整套的API用于对数据库进行增删改查操作。SQLite是一个轻量的、跨平台的、开源的数据库引擎。SQLite每个数据库都是以单个文件(.db)的形式
3、存在,这些数据都是以B-Tree的数据结构形式存储在磁盘上。 使用SQLiteDatabase的insert,delete等方法或者execSQL方法默认都开启了事务,如果操作的顺利完成才会更新.db数据库。事务的实现是依赖于名为rollbackjournal文件,借助这个临时文件来完成原子操作和回滚功能。 大家可以在/data/data//databases/目录下看到一个和数据库同名的.db-journal文件。 SQLite想要执行操作,需要将程序中的SQL语句编译成对应的SQLiteStatement,比如"sel
4、ect*fromtable1",每执行一次都需要将这个String类型的SQL语句转换成SQLiteStatement。如下insert的操作最终都是将ContentValues转成SQLiteStatementi: publiclonginsertWithOnConflict(Stringtable,StringnullColumnHack, ContentValuesinitialValues,intconflictAlgorithm){ //省略部份代码 SQLiteStatementstatement=newSQ
5、LiteStatement(this,sql.toString(),bindArgs); try{ returnstatement.executeInsert(); }finally{ statement.close(); } }finally{ releaseReference(); } } 对于批量处理插入或者更新的操作,我们可以重用SQLiteStatement,使用SQLiteDatabase的beginTransaction()方法开启一个事务,样例如下: try { sqLiteDataba
6、se.beginTransaction(); SQLiteStatementstat=sqLiteDatabase.compileStatement(insertSQL); //插入10000次 for(inti=0;i<10000;i++) { stat.bindLong(1,123456); stat.bindString(2,"test"); stat.executeInsert(); } sqLiteDatabase.setTransactionSuccessful(); } catch(SQLEx
7、ceptione) { e.printStackTrace(); } finally { //结束 sqLiteDatabase.endTransaction(); sqLiteDatabase.close(); } 我在华为Nexus6P上对常见的几种做法做了一下测试。 直接使用SQL语句进行插入 直接使用SQL语句插入,添加事务 使用ContentValues方式,添加事务 使用SQLiteStatement方式,添加事务 结果如下图: 从数据上看,第四种方式使用SQLiteStatement
8、最快,不过只要添加了事务(或者说只需要一个事务,不是每条插入都使用事务),后三种方式的差别并不大。所以针过这个题目的插入的优化可以通过“SQLiteStatement+事务”的方式显著提高效率。 查询方面的优化一般可以通过建立索引。建立索引会对插入和更新的操作
此文档下载收益归作者所有