我有一个包含3列" ID"," NAME" &安培; " STATUS&#34 ;.我想在我的数据库上执行一个查询,我只能得到一个" ID"位于顶行。我有一个有效的SQL查询,
"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;
}
Al通过它提供了所需的输出,但我想知道是否还有其他方法可以更有效地做到这一点。
答案 0 :(得分:1)
您可以使用Limit
public Cursor query(String table,String [] columns,String selection,String [] selectionArgs,String groupBy,String having,String orderBy,String limit)
limit - 限制查询返回的行数,格式为LIMIT子句。传递null表示没有LIMIT子句。
你可以这样做:
Cursor mCount = db.query(TABLE_CONTACTS, new String[] { "id" }, "status = ?", new String[] { "PENDING" }, null, null, "id ASC", "1");
这将使您无法获取超出需要的数据。
答案 1 :(得分: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" });