2013-08-10 3 views
5

データベースが空でない場合でも、カーソルは常にnullを返します。どうして?それを解決する方法は?ありがとうございました。Android:データベースが空でなくても、カーソルは常にnullを返す

public StatParcours getOneUserInfo(int id) { 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = db.query(TABLE_USER, new String[] { KEY_USER_ID, 
      KEY_STUDN , KEY_STUDBD, KEY_TEACHN, KEY_TEACHBD}, KEY_USER_ID + "=?", 
      new String[] { String.valueOf(id) }, null, null, null, null); 

    StatParcours stat = null; 
    if ((cursor!= null)&&(cursor.moveToFirst())){  
     stat = new StatParcours(
      Integer.parseInt(cursor.getString(0)), 
      cursor.getString(1), 
      cursor.getString(2), 
      cursor.getString(3), 
      cursor.getString(4)); 
    } 
    return stat ; 
}  
+0

カーソルがヌルになっていませんか?おそらくそれはちょうど行がありません?作成しているクエリで少なくとも1つの結果が返されることを確認しましたか? – Karakuri

+0

はい、ログを使用してデータベースの内容をチェックしましたが、このメソッドを呼び出すとStatの値が表示され、魔法使いは常にnullです。カーソルが常にnullであることを理解しました。 – user2613911

+0

'Log.d(" Foo "、" Cursor is: "+ cursor);'それは 'Cursor is:null'を出力しますか?それが 'null'を出力しなければ、カーソルは空です。空の場合、条件に一致する要素が0件見つかりました。クエリが間違っているかどうかを確認する必要があります。 – zapl

答えて

0

あなたは確信している、カーソルがnullかでないとされていない場合、あなたはcursor.getCountを(確認必要)ゼロでないenture必要がありますか?

if (cursor!= null && cursor.getCount() > 0 && cursor.moveToFirst()){ 
    //do something 
} 

カーソルがnullまたはcursor.getCount(ある場合)はゼロですが、データベースが存在し、データが正しい、あなたは、SQLを検出し、この問題を解決するために、端末またはSQLクライアントでコマンドを実行する必要があります。

+0

これはdidn – user2613911

+0

'null'をチェックする必要はなく、' getCount'と 'moveToFirst'のチェックは冗長です。 –

+0

つまり、カーソルが* nullの場合、 'query'が例外をスローしたので、チェックには行きません。 –

2

ユーザーIDを文字列値と比較しています。ユーザーIDが数字の場合は成功しません。

Androidでは、クエリパラメータは文字列値にのみ使用する必要があります。あなたは、クエリ文字列に直接整数を埋め込む必要があります。

cursor = db.query(..., ..., KEY_USER_ID + "=" + id, null, ...); 
0

CursorFactory値をデータベースを作成するときに特定の要件を持っていない場合はnullでなければなりません。

これで私はこの問題を解決しました。

関連する問題