0

我根据部门对员工进行排序的查询是这样的

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 是否正确?

4

1 回答 1

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))

但是您的光标只有三列:

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

第三, SQLiteDatabase#query()将始终返回一个光标。此 Cursor 可能为,但不会null。此外,您的查询仅返回KEY_DEPTequals的结果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();
}

(完成后不要忘记关闭光标和数据库!)

于 2012-09-20T18:23:59.837 回答