J'ai une base de données SQLite dans Android et j'utilise un Problème: em> strong> p> Cependant, lorsque je question: em> p> donc, comment faire Je me taile ces lignes de journalisation? Est-ce que même possible? P> Veuillez lire le commentaire ci-dessous pour la raison de poser la question. P> ERREUR: EM> P> Colonne temporelle a la contrainte code> unique > p> ContentProvider code> pour gérer les opérations, qui sont persistées à une table avec un qualificatif unique dans une colonne.
insert code> des valeurs dupliquées dans la base de données, elle ne casse pas mon code en soi, mais cela crache toujours des milliers de personnes. de
SQLITECONTAINTEXCEPTION CODE> Lignes de journalisation et à mon utilisateur qui a l'impression de polluer le journal, quelque chose de non poli. J'ai essayé d'attraper l'exception juste pour expérimenter, mais cela se connecte toujours. P>
3 Réponses :
Si vous pouvez formuler ou modifier le SQL vous-même, soit pour Je trouve l'idée d'utiliser Toutefois, si les doublons résultent d'un bogue (plutôt que des événements / actions en double que votre code ne soit tout simplement pas explicitement débliciant), cela pourrait simplement cacher le bogue plutôt que de la fixer. Le manque de délégoculation explicite, cependant, n'est pas un bug à mon avis. Donc, si le correctif est de vérifier les doublons, utilisez la base de données; Si le problème réel est qu'ils ont été générés en premier lieu (au niveau de l'application réel, pas le niveau de ligne de base de données), je rechercherais probablement ce problème. P> Insérer code> ou pour le tableau
initial code>, vous pouvez utiliser Extensions de manipulation deconflics . Il y a deux options pour comment faire ceci: p>
insert ou ignorez code> plutôt que simplement
insérer code>. Vous pouvez également utiliser
ou remplacer code>,
ou abandonner code> ou l'une de plusieurs autres réactions. LI>
sur le conflit Ignore code> clause de la contrainte code> unique code>. Cela causera des inserts ou des mises à jour qui violent la contrainte pour ne rien faire silencieusement. Li>
ul>
insert ou ignorer code> /
insérer ou remplacer code> pour gérer les données en double, en particulier dans des environnements simultanés, pour être très propre. Il vérifie la duplication une fois - dans la base de données - et évite les conditions de race où vous vérifiez d'abord l'existence (ce n'est certes aucun problème si un seul processus / thread accède à la base de données). P>
Merci, c'est exactement ce que j'avais à l'esprit. J'ai également remarqué que si j'utilise sur le conflit ignore code> sur le schéma de la table,
sqlitedatabase.insert (chaîne, chaîne, contenus) code> signalera la ligne comme insère ... Soyez prudent si vous en avez besoin. Et oui, envisagez de télécharger de multiples services en téléchargement de choses, cela bénéficie également d'éviter les conditions de course. Merci.
Oui, vous pouvez le laisser et comme vous dites que vous pourriez le réparer. À mon avis, cela dépend si les DUPS sont des événements exceptionnels ou «se produisent simplement parce que vous êtes paresseux». P>
Je pense que dans la principale, il coûte moins de nettoyer les données à l'entrée à un module que pour y faire face. Cependant, comment vous définissez le coût est à vous. p>
La plupart des DUPS ne sont pas, mais certains d'entre eux pourraient être réparés par moi avant même de déclencher le téléchargeur de service. Je suis d'accord sur la vérification au point d'entrée. Cependant, je suis loin de finir le code et je posais également cela dans une perspective "quoi-si".
Utiliser sqlitedatabase.insserTHOWROW (...) code> p>
Je sens que tout cela signifie que ce que j'essaie de faire est une façon paresseuse de se remettre d'un insert dupliqué sur une contrainte unique, d'où la sensation «non polie» dans le journal. Je vais probablement mieux résoudre tout ce qui crée les entrées dupliquées (et appelez les inserts) pour commencer. Je suis tout pour la douceur. Mais cela soulève la question (à moi): pourquoi nous ne pouvons pas simplement "décharger" en toute sécurité, travailler sur le vérificateur de contrainte et laisser tomber en panne en silence? Juste au cas où nous voudrions ... peut-être que nous attendons des doublons ... Donc, rien à craindre. Peut-être que notre source de données, en dehors de notre contrôle, est défectueuse de commencer ...
Commentaire après avoir répondu: Comme je l'ai dit, j'étais paresseux à des fins, aux fins de cette question, alors que j'essayais de ne pas coder les chèques et laissez-la à SQLite vous demandant environ 1) la sécurité (concurrence), 2) l'efficacité (est SQLite meilleur / plus rapide que moi à ce sujet? Probablement) et aussi 3) pratiquement (moins de code). Cependant, certaines choses ont attiré mon esprit (le nombre de lignes insertions), donc j'ai mis en œuvre les DUPS Vérifiez-moi en plus des contraintes. Quoi qu'il en soit, j'ai fini très satisfait de mon code concernant (1). N'oubliez pas que lorsque vous lisez cette question.
Si vous n'utilisez pas Android.UtilL.Log vous-même, alors pourquoi êtes-vous préoccupé par les erreurs de journalisation de l'utilisateur?
Eh bien ... ce n'est pas en train de se connecter, mais le fait que le journal implique que je ne suis pas assez efficace. Le journal est le symptôme, pas ce que je suis inquiet.
Je vois. Vous avez dit: "À mon utilisateur qui a l'impression de polluer le journal". D'où la clarification.
Je sais, j'ai compris votre point. Les lignes de journal polluées étaient le symptôme à une certaine inefficacité, désolé si je n'étais pas clair, mais je suis content que vous compris maintenant ce que je voulais dire.