2011-10-26 4 views
0

J'essaie de parcourir mes enregistrements de base de données. mais pour une raison quelconque, il retourne toujours un curseur vide. Si je retire de l'émulateur le fichier de base de données de l'onglet 'Explorateur de fichiers', je peux voir la table et les données qui s'y trouvent.rawQuery return retourne toujours false

voici mon code:

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

maintenant while (! Result.moveToNext()) reviennent toujours faux.

c'est ma classe 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 

    } 

} 

une idée?

Merci, ray.

+0

"maintenant while (! Result.moveToNext()) retourne toujours false." parce que result.moveToNext() renvoie true, supprimez le! – Carnal

Répondre

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

C'est beaucoup plus compliqué que ce qu'il doit être. Il n'est pas nécessaire d'appeler result.moveToFirst() avec la sortie de journal dupliquée. Une simple boucle while (result.moveToNext()) est très bien. –

+0

Ouais c'est peut-être vrai, juste comme je l'ai fait au début et toujours le faire pour être sûr: P – Carnal

+0

C'est vrai ce que tu dis – Carnal

2
while (!result.moveToNext()) 

Enlevez le ! et il commencera magiquement à fonctionner. Votre code actuel dit "alors qu'il n'y a pas plus de résultats ..."

Questions connexes