2017-10-21 47 views
0

Je travaille avec la base de données SQLite dans le studio android. Mon code onCreate:requête sans travail

@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_MOODS_TABLE = "CREATE TABLE " + TABLE_NAME_MOODS + "(" 
      + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT," + COLUMN_MOODS + " TEXT NOT NULL)"; 
    db.execSQL(CREATE_MOODS_TABLE); 
} 

et mes requêtes:

@Override 
public Uri insert(@NonNull Uri uri, ContentValues values) { 

    final SQLiteDatabase db = mMindsDbHelper.getWritableDatabase(); 
    final SQLiteDatabase db2 = mMindsDbHelper.getReadableDatabase(); 
    long id = db.insert(TABLE_NAME_MOODS, null, values); 
    String query = "SELECT * FROM "+ TABLE_NAME_MOODS; 
    Cursor returnCursor; 
    returnCursor = db2.rawQuery(query, null); 
    return null; 
} 

Pour le débogage j'ai ajouté requête de sélection à cet endroit. lorsque le débogueur atteint ces points, l'ID de retour de db.insert renvoie une valeur (c'est-à-dire l'ID des nouvelles valeurs insérées). Mais select query ne retourne rien d'utile (il renvoie mCount comme -1). J'ai essayé aussi la requête suivante mais le résultat est le même.

returnCursor = db.query(TABLE_NAME_MOODS, 
        projection, 
        selection, 
        selectionArgs, 
        null, 
        null, 
        sortOrder); 

Où est le problème.

+1

Vous obtenez un curseur 'returnCursor' mais vous ne faites rien avec. Avez-vous essayé d'itérer ce curseur? –

+0

@TimBiegeleisen Dans les fenêtres de débogage, il affiche tous les détails de returnCursor. Et il retourne seulement les noms de colonnes, et mCount comme -1; –

+0

@EnigmaticMind curseur jusqu'à ce que vous faites quelque chose avec cela montrera cela. Essayez d'ajouter la ligne 'returnCursor.getCount();' puis déplacez-la pour retourner null; dans le débogage. Vous verrez alors le compte. Vous pouvez aussi essayer 'returnCursor.movetoFirst()' comme une ligne (etc). Vous pouvez également trouver cela utile [Existe-t-il des méthodes qui aident à résoudre les problèmes courants de SQLite?] (Https://stackoverflow.com/questions/46642269/are-there-any-methods-that-assist-with-resolving-common -sqlite-questions) – MikeT

Répondre

1

Mais sélectionnez requête ne retourne pas quelque chose d'utile (elle retourne mcount comme -1)

rawQuery() compile une requête, mais ne l'exécute pas. Le compte est donc -1 pour une requête qui n'a pas encore été exécutée. La même chose s'applique à query() car il s'agit essentiellement d'un emballage pour rawQuery(). Une requête qui a été exécuté et correspondait pas de dossiers aurait son compte réglé sur 0.

Pour exécuter effectivement au moins une étape d'une requête compilé avec rawQuery(), vous devez appeler l'une des méthodes moveTo...() sur le retour Cursor. Par exemple, moveToFirst().

+0

Merci beaucoup. Cela m'a fait gagner du temps. –