Android面试之SQLite数据库.docx

Android面试之SQLite数据库.docx

ID:57609468

大小:35.55 KB

页数:5页

时间:2020-08-28

Android面试之SQLite数据库.docx_第1页
Android面试之SQLite数据库.docx_第2页
Android面试之SQLite数据库.docx_第3页
Android面试之SQLite数据库.docx_第4页
Android面试之SQLite数据库.docx_第5页
资源描述:

《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+事务”的方式显著提高效率。  查询方面的优化一般可以通过建立索引。建立索引会对插入和更新的操作

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。