Supprimer SQLite Ligne avec la clause where avec de multiples clauses
J'ai cherché partout et pas réussi à trouver une solution ou du travail exemple donc, ici, va.
J'ai créé une base de données SQLite qui a cinq colonnes avec différents domaines qui s'appuie efficacement une liste pour l'utilisateur. Il y aura plusieurs valeurs dans la liste sont les mêmes, sauf pour le ROWID qui est définie sur auto incrément.
Ni l'utilisateur ni que le programme sache ROWID une fois qu'une valeur a été entrée dans la base de données, donc je veux pour l'utilisateur d'être en mesure de supprimer une ligne si elle contient tous les quatre, les autres champs.
Mon code ressemble à ceci:
Database
.delete(DATABASE_TABLE,
"KEY_DATE='date' AND KEY_GRADE='style2' AND KEY_STYLE='style' AND KEY_PUMPLEVEL='pumpLevel'",
null);
Mais cela ne supprime pas toutes les valeurs. Je suis presque certain que la syntaxe de cette commande est à blâmer.
Comment dois-je formater une clause where pour supprimer la commande avec plusieurs clauses where?
Solution ci-dessous:
ourDatabase.delete(DATABASE_TABLE, "ROWID = (SELECT Max(ROWID) FROM "
+ DATABASE_TABLE + " WHERE " + "date=? AND grade=? AND "
+ "style=? AND pump_level=?)", new String[] { date, grade,
style, pumpLevel });
OriginalL'auteur Gareth Bowen | 2012-08-28
Vous devez vous connecter pour publier un commentaire.
J'ai le sentiment que
KEY_DATE
,KEY_GRADE
, etc êtes-vous Java noms de variables pas de votre réelle des noms de colonne. Essayez de changer votre code:Aussi je suppose que
'date'
,'style'
, etc sont stockés dans des variables locales, vous devez utiliser lewhereArgs
paramètre de projet vous-même à partir de Les Attaques par Injection SQL:(où
date = "date"
,grade = "style2"
, etc)Ajout de commentaires
Pour supprimer la dernière ligne utiliser ceci:
Pour supprimer la dernière ligne correspondante essayez ceci:
Mais voir ma deuxième remarque à propos des Attaques par Injection SQL pour protéger vos données.
Ha! J'ai mis à jour ma réponse. Comment est-ce?
Je ne suis pas encore sûr de votre question exacte... Mais si vous avez plusieurs lignes avec
KEY_DATE = 'date'
, etc et que vous voulez supprimer la dernière ligne correspondante: vous pouvez combiner mes deux dernières suggestions.Elle fonctionne. Merci. Si ce n'est pas trop de problèmes, pouvez-vous expliquer comment cela fonctionne, car je ne comprends pas comment sait-il que les valeurs à rechercher.
Bien sûr,
SELECT Max(ROWID)
renvoie la valeur la plus élevée pourROWID
qui est la dernière ligne ajoutée puisque vous êtes à l'aide d'un autoincrementing clé. Alors, vraiment, vous avez deux commandes qui arriventSELECT...
trouve le plus grandROWID
et transmet cette valeur à votre.delete(...)
de commande. Découvrez ce guide pour une explication détaillée des différentes fonctions SQL comme Count(), Max(), Min(), etc.OriginalL'auteur Sam
Vous devez utiliser:
qui simplifie échapper valeurs.
KEY_DATE
je suis en utilisantdate
. Malheureusement, cela supprime toutes les valeurs qui correspondent aux critères de date, de qualité, de style et de pumplevel. Ce que je veux faire est de supprimer un seul de ces valeurs et de laisser le reste. Peut ce code est-il adapté pour ce faire?Vous devez supprimer les lignes de la table à l'aide de la clé primaire, qui est unique, et donc une seule ligne correspond.
Désolé d'être dense, mais comment puis-je trouver les rowid pour les lignes qui correspondent aux quatre valeurs, je suis à la recherche d'?
La question que vous devriez vous poser est de savoir pourquoi vous êtes en insérant des lignes qui ne diffèrent que dans son rowid (si c'est ce que vous faites).
il s'ouvre dans le navigateur rit...
OriginalL'auteur Diego Torres Milano