2014-06-26 58 views
0

我有一个3列“ID”,“名称”&“状态”的表。我想对我的数据库执行一个查询,在那里我只能得到一个位于最上面一行的“ID”条目。我有一个工作的SQL查询,Android中的SQLite的复杂查询

"SELECT TOP 1 ID from SAMPLE_TABLE WHERE Status='PENDING' ORDER BY ID ASC;"

这是迄今为止我在Android的实施,

// Getting pending items 
     public int pendingContact() { 
      SQLiteDatabase db = this.getWritableDatabase(); 
      Cursor mCount = db.query(
        TABLE_CONTACTS , 
        new String[] { "id" } , 
        "status = ?" , 
        new String[] { "PENDING" } , 
        null , 
        null , 
        null 
       ); 

      mCount.moveToFirst(); 
      int count = mCount.getInt(0); 
      mCount.close(); 

      return count; 
     } 

铝通过它得到所需的输出,但我想知道是否有任何其他方式更有效地做到这一点。

回答

1

您可以使用Limit

公共光标查询(字符串表,字符串[]列,字符串选择的String [] selectionArgs两个,字符串GROUPBY,有字符串,字符串的OrderBy,字符串限制)

限制 - 限制查询返回的行数,格式为LIMIT子句。传递null表示没有LIMIT子句。

你可以这样做:

Cursor mCount = db.query(TABLE_CONTACTS, new String[] { "id" }, "status = ?", new String[] { "PENDING" }, null, null, "id ASC", "1");

这将让你比你需要获取更多的数据。

+0

而'orderBy'? –

+0

工作查询确实如此。没有排序,结果将是随机的。 –

+0

有ORDER BY ID ASC。 –

0

当您使用ORDER BY时,数据库将读取并对所有PENDING项进行排序,然后它可以返回第一个项目。

当使用MIN,不过是最小的值必须临时存储:

SELECT MIN(id) FROM Contacts WHERE Status = 'PENDING' 

在代码:

Cursor mCount = db.rawQuery("SELECT MIN(id) FROM Contacts WHERE Status = ?", 
          new String[] { "PENDING" });