Android面试之SQLite数据库鹭岛厦门是个很美丽的海滨城市,给我的感觉很舒适和悠闲,据说政府对到那工作的高新技术人才第一年有10万元的奖励,因为这个原因我很有兴趣的参加了一个厦门公司的面试。他们主要是研发VOIP方面的技术,对手机应用的性能优化和音频算法有较高的要求。他们招人的薪资半年内涨了30万元,都一直都没有招到合适的人。为什么呢?因为他们要求技术好的同时,英语也要好。什么才叫好呢?就是可以用流利的英语和国外的团队无障碍交流。这就为难很多程序员了。这里就不再讲英语的励志故事了,我们回到技术面试上。厦门这家公司对技术的要求还是比较高,问了很多对Android机制的理解问题,为什么面试官很在意对机制的理解呢?因为实际的项目中很多性能问题都是由于缺乏对Android运行机制的正确理解的程序员引发的。除了机制问题,现在印象比较深的就是关于SQLite数据库操作的性能优化问题。面试题:如何对SQLite数据库中进行大量的数据插入? Android系统内置了SQLite数据库,并且提供了一整套的API用于对数据库进行增删改查操作。SQLite是一个轻量的、跨平台的、开源的数据库引擎。SQLite每个数据库都是以单个文件(.db)的形式存在,这些数据都是以B-Tree的数据结构形式存储在磁盘上。使用SQLiteDatabase的insert,delete等方法或者execSQL方法默认都开启了事务,。事务的实现是依赖于名为rollbackjournal文件,借助这个临时文件来完成原子操作和回滚功能。大家可以在/data/data//databases/-journal文件。 SQLite想要执行操作,需要将程序中的SQL语句编译成对应的SQLiteStatement,比如"select*fromtable1",每执行一次都需要将这个String类型的SQL语句转换成SQLiteStatement。如下insert的操作最终都是将ContentValues转成SQLiteStatementi: publiclonginsertWithOnConflict(Stringtable,StringnullColumnHack, ContentValuesinitialValues,intconflictAlgorithm){ //省略部份代码 SQLiteStatementstatement=newSQLiteStatement(this,(),bindArgs); try{ (); }finally{ (); } }finally{ releaseReference(); } } 对于批量处理插入或者更新的操作,我们可以重用SQLiteStatement,使用SQLiteDatabase的beginTransaction()方法开启一个事务,样例如下: try { (); SQLiteStatementstat=pileStatement(insertSQL); //插入10000次 for(inti=0;i<100
Android面试之SQLite数据库 来自淘豆网www.taodocs.com转载请标明出处.