关于排序的Android Sqlite查询

时间:2012-09-20 18:18:44

标签: android sqlite android-sqlite

我根据dept对员工进行排序的查询是

public Cursor fetchDept(String dept)throws SQLException
{
Cursor c=mDb.query(DATABASE_TABLE, new String[] {KEY_NAME,KEY_DESGN,KEY_PHONE}, KEY_DEPT + "=" ,new String[]{dept}, null, null, null, KEY_DEPT);
if (c!= null) {
    c.moveToFirst();
}
return c;

}

我已将活动类的值传递给此查询,如此

   {
        db.open();
        Cursor c=db.fetchDept(dept);

        if (c!= null) {
            c.moveToFirst();
            do
            {
            if(dept.equals(c.getString(3)))
            {

        Toast.makeText(this,"found",Toast.LENGTH_LONG).show();
        return;
            }
            //c.getString(1) +c.getString(2)+ c.getString(4)
            else
            {
                Toast.makeText(this,"No dept",Toast.LENGTH_LONG).show();
                return ;
            }
            }while(c.moveToNext());
        }

运行此应用程序时强行关闭。如果有人可以帮助请帮忙! 是传递参数,在上面调用db.query是正确的吗?

1 个答案:

答案 0 :(得分:1)

你还没有发布LogCat,但有一些事情突然发生在我身上:

首先,如果您使用whereArgs参数,则需要使用?替换字符:

Cursor c=mDb.query(DATABASE_TABLE, new String[] {KEY_NAME,KEY_DESGN,KEY_PHONE},
        KEY_DEPT + "=?", new String[]{dept}, null, null, null, KEY_DEPT);
// You forgot this:  ^

(小点:您只需要一个KEY_DEPT,因此按KEY_DEPT排序结果无效。)

其次,您要求第四个列:

dept.equals(c.getString(3))

但您的Cursor只有三列:

new String[] {KEY_NAME,KEY_DESGN,KEY_PHONE}
//  Columns:     0    ,   1     ,   2     ,  no column 3

第三, SQLiteDatabase#query()将始终返回一个Cursor。此Cursor可能为空但它不是null。此外,您的查询仅返回KEY_DEPT等于dept的结果,因此您无需再次检查...请尝试使用此代码:

db.open();
Cursor c=db.fetchDept(dept);

// Check any rows that were returned
if(c.getCount() > 0) {
    Toast.makeText(this,"found "+c.getCount()+" matches",Toast.LENGTH_LONG).show();
    while (c.moveToNext()) {
        // Do something extra with each result
    }
}
// The Cursor is empty (No departments does not exist with the name in dept) 
else {
    Toast.makeText(this,"No dept",Toast.LENGTH_LONG).show();
}

(完成后别忘了关闭光标和数据库!)