2011-09-04 3 views
0
public public udpateNoteInfo(String text){ 
    ContentValues val = new ContentValues(); 
    val.put(KEY_CONTENT5, text);   

    sqLiteDatabase.update(MYDATABASE_TABLE, val,"ORDER_BY("+KEY_ID+") DESC LIMIT 0,1", new String[]{text}); 
} 

Je tente de mettre à jour la dernière ligne de la colonne KEY_CONTENT5 dans mon SQLite, mais c'est une erreur. Je suppose que c'est son erreur au "ORDER_BY("+KEY_ID+") DESC LIMIT 0,1" mais je ne sais pas comment le corriger. S'il vous plaît dites-moi si vous le savez. Je vous remercie.Impossible de mettre à jour la dernière ligne sur SQLite

ERROR: 
09-05 11:47:54.769 E/Database(4386): Error updating note=Test using UPDATE PERSONAL_TABLE SET note=? WHERE _id = (SELECT max(_id) FROM PERSONAL_TABLE) 

Classe d'activité:

public void updateNote(String txt) { 
     mySQLiteAdapter = new PersonalSQLiteAdapter(this); 
     mySQLiteAdapter.openToWrite(); 
     cursor = mySQLiteAdapter.queueAll(); 
     if (cursor != null) { 
      mySQLiteAdapter.udpateNoteInfo(txt); 
     } 
     mySQLiteAdapter.close(); 
    } 

classe SQLiteAdapter (pas d'activité):

public void udpateNoteInfo(String text) { 
     ContentValues val = new ContentValues(); 
     val.put(KEY_CONTENT5, text); 
     sqLiteDatabase.update(MYDATABASE_TABLE, val, KEY_ID + " = (SELECT max(" 
       + KEY_ID + ") FROM " + MYDATABASE_TABLE + ")", 
       new String[] { text }); 

    } 

Répondre

3

Vous ne pouvez pas mettre un ordre par une mise à jour. Vous pouvez essayer quelque chose comme ceci: WHERE id = (SELECT max (id) FROM TABLE) si vous voulez mettre à jour le dernier identifiant, en supposant que vos séquences ne sont pas modifiées.

+0

J'essaie votre suggestion comme ceci: sqLiteDatabase.update (MYDATABASE_TABLE, val, "OU "+ KEY_ID +"= (SELECT max ("+ KEY_ID +") FROM "+ MYDATABASE_TABLE +") ", new String [] {text}); Mais c'est toujours une erreur. – Yoo

+0

Collez l'erreur ici, il peut être connecté à autre chose. – IncrediApp

+0

S'il vous plaît voir mon edit ci-dessus. Je mets 'WHERE' dehors parce qu'il a double WHERE dans logcat alors je pense que c'est faux. Cependant, c'est toujours une erreur. Merci de votre aide. – Yoo

0

Vous pouvez interroger l'ID, puis, mettre à jour cette ligne ... si vos valeurs KEY_ID ne sont pas uniques, vous aurez besoin d'utiliser votre colonne de clé primaire (s) au lieu de celui-ci ...

Cursor cLast = db.query(MYDATABASE_TABLE, [KEY_ID], null, null, null, "ORDER_BY("+KEY_ID+") DESC", "LIMIT 0,1"); 
if (cLast.moveToFirst()) { 
    long lastKey = cLast.getLong(0); // if it's not a long, use the appropriate getter 
    sqLiteDatabase.update(MYDATABASE_TABLE, val, "WHERE KEY_ID=?", lastKey); 
} 
+0

Pourriez-vous s'il vous plaît expliquer votre code? Je suis assez confus avec des variables telles que cLast et itemCursor sont les mêmes? Le paramètre n'est pas complet? Que fait lastKey, je pense que ce n'est jamais utilisé après qu'il a été assigné. Merci beaucoup. – Yoo

+0

désolé, j'ai oublié de changer certains noms/paramètres ... Je viens de le modifier. – Whiler

2
public void udpateNoteInfo(String text) { 
     ContentValues val = new ContentValues(); 
     val.put(KEY_CONTENT5, text); 
     sqLiteDatabase.update(MYDATABASE_TABLE, val, KEY_ID+" = (SELECT max("+KEY_ID+") FROM "+MYDATABASE_TABLE+")", null); 
    } 

Ma réponse finale.

0

set de table UPDATE col = 1 WHERE id = (SELECT MAX (id) FROM table)

Questions connexes