2011-10-26 20 views
0

私のデータベースレコードを反復しようとしています。何らかの理由で常に空のカーソルを返します。 私は、エミュレータからデータベースファイルを 'ファイルエクスプローラタブ'を引っ張った場合、私はテーブルとその中のデータを見ることができます。ここrawQueryの戻り値は常にfalseを返します

は私のコードです:

Cursor result = db.getReadableDatabase().rawQuery(
        "SELECT _ID, STUDENT_NAME, STUDENT_GRADE, STUDENT_ADDRESS " 
          + "FROM students", null); 
      while (!result.moveToNext()) 
      { 
       int id = result.getInt(0); 
       String studentName = result.getString(1); 
       String studentGrade = result.getString(2); 
       String studentAddress = result.getString(3); 
       Log.d("Sqlitedemo", "ID=" + id + ", STUDENT_NAME=" + studentName +", STUDENT_GRADE="+studentGrade+", STUDENT_ADDRESS="+studentAddress); 
      } 
      result.close(); 

今(result.moveToNextは、()!)常にfalseを返しながら。

これは私のDatabaseHelperクラスです:

public class DatabaseHelper extends SQLiteOpenHelper 
{ 
    private static final String DATABASE_NAME = "db"; 
    static final String   STUDENT_NAME = " STUDENT_NAME"; 
    static final String   STUDENT_GRADE = "STUDENT_GRADE"; 
    static final String   STUDENT_ADDRESS = "STUDENT_ADDRESS"; 

    public DatabaseHelper(Context context) 
    { 
     super(context, DATABASE_NAME, null, 1); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) 
    { 
     // creating the table 
     db 
       .execSQL("CREATE TABLE students (_id INTEGER PRIMARY KEY AUTOINCREMENT, STUDENT_NAME TEXT, STUDENT_GRADE TEXT, STUDENT_ADDRESS TEXT);"); 

     ContentValues cv = new ContentValues(); 

     cv.put(STUDENT_NAME, "Roi"); 
     cv.put(STUDENT_GRADE, "85"); 
     cv.put(STUDENT_ADDRESS, "Tel aviv"); 

     db.insert("students", STUDENT_NAME, cv); 

    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
    { 
     // TODO Auto-generated method stub 

    } 

} 

任意のアイデア?

ありがとう、 ray。

+0

"now(!result.moveToNext())は常にfalseを返します。 result.moveToNext()はtrueを返しますので、! – Carnal

答えて

4
Cursor result = db.getReadableDatabase().rawQuery(
       "SELECT _ID, STUDENT_NAME, STUDENT_GRADE, STUDENT_ADDRESS " 
         + "FROM students", null); 
int id = result.getInt(0); 
String studentName = result.getString(1); 
String studentGrade = result.getString(2); 
String studentAddress = result.getString(3); 
if (result.moveToFirst()) 
{ 
    Log.d("Sqlitedemo", "ID=" + id + ", STUDENT_NAME=" + studentName +", STUDENT_GRADE="+studentGrade+", STUDENT_ADDRESS="+studentAddress); 
    while(result.moveToNext()) 
    { 
     Log.d("Sqlitedemo", "ID=" + id + ", STUDENT_NAME=" + studentName +", STUDENT_GRADE="+studentGrade+", STUDENT_ADDRESS="+studentAddress); 
    } 
} 
result.close(); 
+0

これは、必要以上に複雑です。重複したログ出力でresult.moveToFirst()を呼び出す必要はありません。単純なwhile(result.moveToNext())ループは問題ありません。 –

+0

ええ、私が最初にやったやり方と同じように、それは真実かもしれません。確かにそれをやっています:P – Carnal

+0

あなたが言っていることは本当です – Carnal

2
while (!result.moveToNext()) 

!を削除すると、魔法のように動作します。あなたの現在のコードは、 "これ以上の結果はありません..."と言っています。

関連する問題