android数据库操作优化(二)
来源:互联网 发布:淘宝头条写手招聘 编辑:程序博客网 时间:2024/06/06 05:16
在android中查询sqlite数据库,我们一般都是写一个继承SQLiteOpenHelper的工具类,然后实例化SQLiteDatabase对象去进行各种增删改查的操作,对于查询出来的结果,我们一般都放在google封装好的Cursor(游标)中,然后从Cursor中取出我们查询语句的value结果,过程类似这样:
public int getId(String name) { int id = 0; SQLiteDatabase db = getReadableDatabase(); if (db.isOpen() && !db.isDbLockedByOtherThreads()) { String sql = "SELECT id from cursor where name = '" + name + "'"; Cursor cursor = db.rawQuery(sql, null); while (cursor.moveToNext()) { id = cursor.getInt(cursor.getColumnIndex("id")); } if (cursor != null) { cursor.close(); } } if (db != null) { db.close(); } return id; }当我们想求得某一列所有数据之和时,我们一般采用这种方法:
public int getSum(){ int sum = 0; SQLiteDatabase db = getReadableDatabase(); if(db.isOpen() && !db.isDbLockedByOtherThreads()){ String sql = "SELECT id FROM people"; Cursor cursor = db.rawQuery(sql, null); while(cursor.moveToNext()){ sum += cursor.getInt(cursor.getColumnIndex("id")); } if(cursor != null){ cursor.close(); } } if(db != null){ db.close(); } return sum; }
通过遍历的方法将Cursor中求出的每一列的值都相加,然后取得最后结果,但这种方法的弊端就是效率,遍历这么多次耗费了太多了时间和资源。
优化的方法是这样的:
public int getSum(){ int sum =0; SQLiteDatabase db = getReadableDatabase(); if(db.isOpen() && !db.isDbLockedByOtherThreads()){ String sql = "SELECT SUM(id) AS sum from people"; Cursor cursor = db.rawQuery(sql, null); while(cursor.moveToNext()){ sum = cursor.getInt(cursor.getColumnIndex("sum")); } if(cursor != null){ cursor.close(); } } if(db != null){ db.close(); } return sum; }
直接用sql语句在数据查询的时候返回这一列所有值之和,由于是在数据库查询的时候就获得了一个结果,不需要在代码中进行遍历,效果当然是杠杠的!!
下图是单元测试的结果,我预先向数据库插入了近1000条数据:
Test1是SELECT id FROM people的结果,Test2是SELECT SUM(id) AS sum from people的结果,text中“----”前面是id的和,后面是执行程序所用的时间,Test1为110毫秒,而Test2为15毫秒!
由于实际需要,我们常常从sqlite数据库中获取int类型,但实际使用的时候我们需要转换数据类型为String类型,其实我们可以在从数据库获取数据的时候直接转换成String类型或者其他类型,例如:
int sum = cursor.getInt(cursor.getColumnIndex("sum"));我们可以直接写成:
String sum = cursor.getString(cursor.getColumnIndex("sum"));
这样就直接获取到了String类型数据了,不需要考虑数据库表数据类型和代码类型转换。
我们在获得数据库返回数据的时候,通常这样写:while(cursor.moveToNext()){};来遍历获取cursor中的数据,这是因为cursor其实是一行一行获取数据库中的数据的,while循环中的sum = cursor.getInt(cursor.getColumnIndex("sum"))中的cursor.getColumnIndex("sum")其实是获取sum这一列位于当前cursor获取这一行数据的第几列,例如第0列就是只想第一个字段,在特定的情况下,我们不知道字段的时候,可以通过cursor.getInt(2);来直接获取该字段数据
- android数据库操作优化(二)
- android数据库操作优化(二)
- android数据库操作优化
- android数据库操作优化
- Android应用优化(7)数据库操作
- Android SQLite数据库操作(二)
- JavaWeb学习之路(二)--- 数据库操作优化
- android数据库操作优化(一)
- android数据库操作优化(一)
- 数据库(二)操作数据库
- android 优化那些事之数据库(二)
- 数据库优化方案(二)
- MySQL数据库优化(二)
- Android数据库批量操作的性能优化
- 数据库优化--操作优化
- Android 使用SQLiteDatabase操作SQLite数据库(二)
- Android 使用SQLiteDatabase操作SQLite数据库(二)
- Android 使用SQLiteDatabase操作SQLite数据库(二)
- Fragments
- js中 返回上一页和刷新
- JQuery Ajax 在asp.net中使用总结
- const int *p,const * int p,int const *p 面试题考试问题
- 利用Linux syslog写日记
- android数据库操作优化(二)
- java assertion详解
- 第二节 控制台应用程序的基本结构,变量
- HANDLE hToken电脑关机代码
- 山东探植物园唯美规划 明年竣工成烟台“后花园”
- I/O重定向详解及应用实例
- Crtmpserver 握手问题
- jstl标签
- jQuery---事件汇总(基础篇)