【问题标题】:Performance difference between a query() and rawQuery() method in AndroidAndroid 中 query() 和 rawQuery() 方法的性能差异
【发布时间】:2014-02-22 17:06:46
【问题描述】:

和使用有什么区别

rawQuery(String sql, String[] selectionArgs)

query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy, String limit)

在安卓系统中?

据我了解,query() 方法应该反过来将其参数转换为 sql 查询。那么,rawQuery() 方法会比query() 提供更好的性能吗?

【问题讨论】:

  • 好吧,rawQuery 不必执行这样的“转换”,所以它应该快一点。它还允许您编写复杂的查询字符串,比如在两个(或更多)不同的表之间进行连接的查询。
  • 无论哪种方式,实际执行 SQL 查找的时间都将占主导地位。 RawQuery 适合懂 SQL 并且不怕它的人,Query 适合不懂 SQL 的人。
  • 您应该检查这两个问题及其答案:stackoverflow.com/q/8435932/529138stackoverflow.com/q/8830753/529138。这个问题有点重复。

标签: android database performance


【解决方案1】:

要执行查询,有两种方法: 执行 db.rawQuery 方法 执行 db.query 方法 要执行原始查询以检索所有部门:

Cursor getAllDepts()
  {
   SQLiteDatabase db=this.getReadableDatabase();
   Cursor cur=db.rawQuery("SELECT "+colDeptID+" as _id, 
        "+colDeptName+" from "+deptTable,new String [] {});

   return cur;
  }

rawQuery 方法有两个参数: 字符串查询:select 语句 String[] selection args:选择语句中包含 WHERE 子句时的参数 笔记 查询的结果在 Cursor 对象中返回。 在 select 语句中,如果表的主键列(id 列)的名称不是 _id,那么您必须使用 SELECT [Column Name] 作为 _id 形式的别名,因为 Cursor 对象总是期望主键键列的名称为 _id,否则将引发异常。 执行查询的另一种方法是使用 db.query 方法。从视图中选择某个部门的所有员工的查询如下:

public Cursor getEmpByDept(String Dept) {
   SQLiteDatabase db=this.getReadableDatabase();
   String [] columns=new String[]{"_id",colName,colAge,colDeptName};
   Cursor c=db.query(viewEmps, columns, colDeptName+"=?", 
        new String[]{Dept}, null, null, null);
   return c;
  }

db.query 有以下参数: 字符串表名:要对其运行查询的表的名称 String [ ] columns:查询的投影,即要检索的列 String WHERE 子句:where 子句,如果没有则传 null String [ ] selection args:WHERE子句的参数 String Group by:指定分组依据子句的字符串 String Have:指定 HAVING 子句的字符串 String Order By:一个字符串Order By子句

【讨论】:

  • 这根本不能回答问题
  • 尊敬的先生,我给出的答案是查询和原始查询之间的区别,以便我们了解基本概念并了解性能。
猜你喜欢
  • 2011-09-16
  • 2013-04-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多