J'ai fait une table SQLite où je peux insérer des données pour mon application de voyage. J'essaie de mettre à jour les rangées, mais je ne peux pas comprendre. J'ai beaucoup cherché mais je fais quelque chose de mal sur la partie de mise à jour et je ne sais pas quoi.
public boolean insertData(String title, String description, String location) { SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(COL_2, title); contentValues.put(COL_3, description); // contentValues.put(COL_4, image); contentValues.put(COL_5, location); long result = db.insert(TABLE_NAME, null, contentValues); if (result == -1) return false; else return true; } //When I'm updating the database public boolean update(String title, String description, String location){ SQLiteDatabase db = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put(COL_2, title); contentValues.put(COL_3, description); contentValues.put(COL_5, location); db.update(TABLE_NAME,contentValues, "location=?", new String[]{location} ); return true; } // I need to press a button in order to save the data saveItem.setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { if(!editLocation.getText().toString().equals("") && !editTitle.getText().toString().equals("") && !editDescription.getText().toString().equals("")){ boolean insert = myDb.update(editLocation.getText().toString(), editDescription.getText().toString(), editTitle.getText().toString()); } else { Toast.makeText(singlemomentactivity.this, "Your moment is not added ", Toast.LENGTH_LONG); }
3 Réponses :
Essayez de mettre à jour cette ligne: pour ceci: p>
nouvelle chaîne [] {trip_location} Impossible de résoudre le symbole trip_location
db.update (name_name, contenuvalues, "trip_location =?", nouvelle chaîne [] {emplacement});
Essayez ceci, peut-être que la référence clé est la question. Mais laissez-moi savoir après avoir essayé cela.
Il ne donne plus d'erreur, mais cela ne l'enregistre pas aussi lorsque j'appuie sur le bouton Enregistrer.
Vérifiez la nouvelle modification. Je viens d'ajouter l'identifiant pour chaque ligne et vous pouvez ainsi mettre à jour la valeur en utilisant son identifiant. Vous n'avez pas besoin du nom de l'élément d'emplacement à nouveau @ numéro70
Passez la valeur de la colonne Trip_id en tant que paramètre: et appelez la méthode: p> boolean insert = myDb.update(
<pass the id's value here>,
editTitle.getText().toString(),
editDescription.getText().toString(),
editLocation.getText().toString()
);
boolean insert = mydb.update (base de donnéesHelper.col_1, éditionLocation.getext (). Tostring (), EditDescription.gettext (). Tostring (), edittitle.getext (). Tostring () ); code> il ne met toujours pas à jour
Non, je veux passer une valeur comme "1" qui est l'identifiant de la ligne que vous souhaitez être mis à jour.
Oui c'est vrai. Cela fonctionne mais cela fait un peu de choses étranges. J'ai une liste de répertorie où les données sont ajoutées et, par exemple, je modifie la description, le titre change.
Votre code a adopté les arguments dans le mauvais ordre à mettre à jour (). Le bon ordre est le suivant: TripID, Titre, Description, Emplacement.
Oh je vois maintenant. Yhaque beaucoup, mais j'ai une question à gauche. Le point est que j'ai 5 données différentes dans ma listeView. Que se passe-t-il maintenant, c'est par exemple je modifie la description de ma ligne 5. Que se passe-t-il, c'est qu'il change la ligne 1. Comment puis-je résoudre ce problème? Merci aussi beaucoup .. ça va aider ma sortie
Y a-t-il un cas que vous ne passez pas la bonne carte d'identité, donc la mauvaise ligne est mise à jour?
Si je ne transmet rien pour (Trip_id "", ...) Rien ne sera mis à jour
Vous devez passer l'identifiant de la ligne que vous souhaitez mettre à jour. Lorsque vous lisez les lignes de la table pour les afficher dans la liste ListView, vous obtenez également l'identifiant de chaque ligne. Lorsque vous souhaitez mettre à jour une ligne, vous devez transmettre cet identifiant comme 1er argument à votre méthode de mise à jour (). Il n'y a pas d'autre moyen.
Oh d'accord, j'ai besoin d'ajouter un editext puis d'entrer l'ID. Merci!
Désolé pouvez-vous l'expliquer plus? Quel problème vous faites face.
Mettez à jour vos données en attribuant un ID d'incrément automatique à celui-ci @ Number70
@Jawadahmed, la mise à jour ne fonctionne pas. Lorsque j'appuie sur le bouton Enregistrer, l'application se bloque.
@Brahmadatta, je viens de commencer à apprendre SQL la semaine dernière. Pouvez-vous peut-être me donner un exemple?
Bien sûr, je vais faire une réponse @ numéro70
@Brahmadatta, merci beaucoup.
Revérifiez vos données de texte Modifier. Il pourrait être Null Pointer Exceptions. S'il n'y a pas de problème, je vais écrire un exemple @ numéro70
@Brahmadatta, je reçois la sqliteeexception.
android.database.sqlite.sqliteexception: non de cette colonne: Emplacement (Code 1 SQLITE_ERROR [1]): ? Où lieu =? Code>
Col_5 est probablement "emplacement" mais cette colonne n'existe pas. Lorsque vous ajoutez des colonnes, elles ne sont pas automatiquement créées dans la base de données de l'application car elles ont été créées pour la première fois que vous ouvrez votre application. Le moyen le plus simple de corriger est désinstaller / installer votre application. Ensuite, la base de données sera recréée. Assurez-vous simplement que la colonne "Emplacement" est créée lors de l'oncreate ()
Y a-t-il une colonne
emplacement code> dans la table? Si vous avez ajouté la colonne après votre première bronzer l'application, désinstallez l'application de l'appareil et de la Rerun.
Si vous souhaitez mettre à jour une ligne dans la table, vous passez 3 valeurs de colonne que vous souhaitez être mises à jour. Jusqu'ici tout va bien. Quelle ligne sera mise à jour? Comment allez-vous le trouver? Par
emplacement code>? Y a-t-il une telle colonne? L'erreur dit non. Si vous souhaitez trouver la ligne en utilisant une autre colonne, vous devez passer un 4ème paramètre à la méthode
mise à jour () code> avec la valeur de cette colonne.
@forpas, je veux mettre à jour 3 colonnes, titre de titre et emplacement. Il existe de telles colonnes et l'erreur est corrigée maintenant. Comment puis-je passer le 4ème paramètre?
Comment voulez-vous trouver la ligne de mise à jour? Avec quelle valeur de colonne? Y a-t-il des identités?
@ forpas, oui col_1 = trip_id, avec une valeur de chaîne.
Voir le code dans ma réponse.