在Android中使用SQLite进行复杂查询

时间:2014-06-26 18:41:03

标签: android sqlite

我有一个包含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通过它提供了所需的输出,但我想知道是否还有其他方法可以更有效地做到这一点。

2 个答案:

答案 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" });
相关问题