Pour mon application, j'essaie d'ajouter des entrées sans avoir une entrée en double, et s'il y a un doublon notifier l'utilisateur et lui faire essayer à nouveau. En utilisant SQLite, que je connais très peu, j'ai essayé ces deux voies et je veux savoir lequel est le meilleur, le plus efficace ou le meilleur moyen de le développer?quelle instruction sqlite peut produire un résultat pour indiquer des entrées en double? Android
Première façon:
db.execSQL("INSERT INTO " + DatabaseHelper.DATABASE_TABLE +
"(LATITUDE, LONGITUDE, RATING) SELECT " + latitude + ", " + longitude + ", " + rating +
" WHERE NOT EXISTS (SELECT 1 FROM " + DatabaseHelper.DATABASE_TABLE +
" WHERE LATITUDE = " + latitude + " AND LONGITUDE = " + longitude + ")");
Deuxième façon:
long id = -1;
try {
id = db.compileStatement(
"SELECT COUNT(*) FROM " + DatabaseHelper.DATABASE_TABLE
+ " WHERE LATITUDE = " + latitude
+ " AND LONGITUDE = " + longitude)
.simpleQueryForLong();
} catch (NullPointerException e) {
return -1;
}
return id;
La première façon, soit des inserts ou ignore les valeurs, je vérifie ce faisant, le stockage de la ligne de comptage des lignes en une variable avant l'appel, appelez cette fonction, puis vérifiez ses résultats. Si les résultats ne sont pas plus élevés qu'avant l'appel, l'insertion a été ignorée et l'utilisateur reçoit le message 'values exists'. (Très bâclée, je sais, mais les temps désespérés appelle des mesures désespérées)
La deuxième façon, renvoie le nombre réel de lignes qui correspondent aux numéros que je veux stocker, si le nombre retourné supérieur à 1, invite l'utilisateur avec le Le message "Valeurs existent".
J'ai fait des allers-retours en essayant différentes manières mais je ne sais pas comment configurer SQLite pour avoir des paires UNIQUES, ce qui m'a été dit être le plus facile. Si quelqu'un peut corriger l'une ou l'autre de ces façons et/ou les commenter, ce serait grandement apprécié.
Merci
ma table n'est pas nommée Database_Table, c'est une constante de chaîne dans ma classe DatabaseHelper, et j'ai pensé à créer un index, mais j'ai quatre champs et je veux seulement deux d'entre eux, puis-je le faire par CREATE INDEX puis effectuez simplement un INSERT OU IGNORE simple? Et si tel est le cas, comment SQLite signalerait-il la contrainte UNIQUEness? Merci d'avance. –
Je sais que je peux utiliser l'instruction INSERT OR IGNORE sur des champs s'ils sont uniques, ce qui est mon cas. Ma façon de dire si la valeur a été insérée ou ignorée est de stocker le nombre-de-lignes avant l'appel et de comparer après, des commentaires sur cela? –
@Anthony: Vous créez l'index en incluant uniquement les deux champs que vous voulez être uniques. Vous n'avez pas besoin de compter les lignes et de comparer. Et n'utilisez pas OR IGNORE, utilisez ABORT (la valeur par défaut) ou ROLLBACK, selon la façon dont vous utilisez les transactions. En utilisant cette technique, vous exécutez une seule commande (INSERT) sur la base de données, en cherchant à voir si l'erreur SQLITE_CONSTRAINT est générée. Si c'est le cas, vous avez essayé (et échoué) d'insérer une ligne en double. –