web-dev-qa-db-fra.com

Requête de mise à jour SQLite Android

La table contient 4 colonnes: rowID, Word, defintition, group_id

Je veux changer le mot et la définition d'une rangée donnée. Voici donc mon code (Word est un objet où sont stockés le mot, la définition, l'id et le group_id)

   ContentValues values = new ContentValues();
    values.put(KEY_Word, Word.getWord());
    values.put(KEY_DEFINITION, Word.getDefinition());
    db.update(TABLE_WORDS, values, KEY_ID, new String [] {String.valueOf(Word.getID())});

Quelqu'un peut-il me dire pourquoi cela crée uniquement une nouvelle ligne au lieu de changer la ligne sous un ID donné?

10
user3199577
SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName());
        values.put(KEY_DATE, contact.getDate());

        // updating row
        return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
                new String[] { String.valueOf(contact.getID()) });
10
Digvesh Patel
   String id = "1";
   SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put(COLUMN_NOTIFICATION_STATUS,"canceled");
    db.update(TABLE_NOTIFICATION, values,COLUMN_NOTIFICATION_ID + " = ? ",new String[]{ String.valueOf(id) });

cela fonctionnera comme une déclaration préparée. Ce morceau de code a fonctionné dans mon cas .. Merci

3
Fazal

cela fonctionne pour moi, alors que db.rawquery ne fonctionnait pas.

requête de sortie 

String qu="UPDATE "+ DATABASE_TABLE_DATA + " SET "+isbookmark+" = "+status+" WHERE id = "+uid+";";
db.execSQL(qu);

output query :
UPDATE tabel_data SET `isbookmark` = 1 WHERE id = 2720271;

1
Muklas

@Digvesh a la bonne idée, mais à cause de cette limitation , la conversion d'un entier en une chaîne à utiliser comme argument de sélection ne fonctionnera pas correctement. Au lieu de cela, faites ceci:

// assume: SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
values.put(KEY_Word, Word.getWord());
values.put(KEY_DEFINITION, Word.getDefinition());
int rowsUpdated = db.update(TABLE_WORDS, values, KEY_ID + "=" + Word.getID(), null);
1
anddev84

Utilisez LIKE au lieu de l'opérateur =.

SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(KEY_NAME, contact.getName());
        values.put(KEY_DATE, contact.getDate());

        // updating row
        return db.update(TABLE_CONTACTS, values, KEY_ID + " LIKE ?",
                new String[] { String.valueOf(contact.getID()) });
0
Ahmad Raza

utilise ce lien il vous aidera à mettre à jour la requête dans la base de données SQLite

0
Boopathi