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:  ^

(マイナーポイント: 1 つしか要求しないKEY_DEPTため、結果をソートしてKEY_DEPTも効果がありません。)

次に、4 番目の列を求めています。

dept.equals(c.getString(3))

ただし、カーソルには3つの列しかありません:

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

第三に、 SQLiteDatabase#query()は常に Cursor を返します。この Cursor はかもしれませんが、そうではありませんnull。また、クエリはKEY_DEPTequalsdeptの結果のみを返すため、再度確認する必要はありません...代わりに次のコードを試してください。

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 に答える