3 votes

Vérifier si une entrée existe dans une base de données

Je veux vérifier si une entrée existe dans ma base de données.

J'ai essayé :

private void saveIt() {     
    MenuItem item = menu.findItem(R.id.menu_2);

    myDB = this.openOrCreateDatabase(MY_DATABASE_NAME, MODE_PRIVATE, null);    
    Cursor c = myDB.rawQuery("SELECT * FROM " + MY_DATABASE_TABLE + " WHERE idwp= '" + id + "'", null);
    if(c == null)
    {
        item.setIcon(R.drawable.b);
        try {
            myDB.execSQL("INSERT INTO "+MY_DATABASE_TABLE+" (titel, extra, html) VALUES ('"+titel.replace("'", "\"")+"','"+extra.replace("'", "\"")+"','"+html.replace("'", "\"")+"');");
        }
        finally
        {
            if (myDB != null)
                myDB.close();
        }
        Toast.makeText(getApplicationContext(), "saved", Toast.LENGTH_SHORT).show();
    }
    else
    {
        Toast.makeText(getApplicationContext(), "already exist", Toast.LENGTH_SHORT).show();
    }
    myDB.close();
}

Mais il est toujours dit "existe déjà". J'ai vu ma base de données. Il n'y a pas d'entrée où id = xxx !

Merci de votre aide !

UPDATE : J'ai trouvé une erreur : INSERT INTO ... extra, html, id <- J'ai oublié l'identifiant !

C'est une communauté formidable pour résoudre les problèmes !

6voto

Sam Points 47925

Un curseur ne sera pas null mais ça pourrait être vide vous devez l'utiliser :

if(c.getCount() > 0) {
    Toast.makeText(getApplicationContext(), "already exist", Toast.LENGTH_SHORT).show();
}
else {
    // Does not exist!
}

Vous pouvez également utiliser l'un des Cursor#move puisqu'elles renvoient true ou false selon qu'il y a ou non des données valides dans le curseur.

3voto

323go Points 9141

Changement

Cursor c = myDB.rawQuery("SELECT * FROM " + MY_DATABASE_TABLE + " WHERE idwp= '" + id + "'", null);
    if(c == null)
    {

à :

Cursor c = myDB.rawQuery("SELECT * FROM " + MY_DATABASE_TABLE + " WHERE idwp= '" + id + "'", null);
    if(c.getCount() == 0 )
    {

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X