2010-08-31 3 views
1

J'ai une table dans une base de données où la colonne _id est la clé primaire. Si j'essaie de faire un insert dans cette table en utilisant un _id qui existe déjà, mon application se bloque. Comment puis-je faire ceci? Existe-t-il un type particulier d'exception que je peux manger? J'ai essayé SQLiteException en vain.Explosion d'une application avec une clé primaire SQL conflictuelle

+0

Y a-t-il une raison particulière pour laquelle vous insérez l'ID vous-même et ne laissez pas la base de données en attribuer une pour vous? En ce qui concerne le type d'exception, cela sera sûrement indiqué dans les détails de l'exception? – rrrr

+0

Je synchronise les données provenant d'un service Web – Andrew

Répondre

0

J'ai compris mon problème. J'utilise maintenant insertOrThrow et attrape SQLiteExceptions. En outre, je jetais une autre exception tout le chemin vers le haut sans l'attraper n'importe où. Je suis en train d'attraper et d'enregistrer ceci.

0

Par définition, la clé primaire doit être unique - une seule valeur doit référencer une seule ligne. Vous ne pouvez faire que ce que vous voulez en changeant quelque chose - soit la structure de la base de données, donc cette colonne n'est plus définie comme une clé primaire (mais réfléchissez bien avant de le faire - toute application écrite contre l'ancien schéma supposons, lors de la sélection basée sur le champ _id, qu'un identifiant unique donnera une seule ligne, et vous casserez cette hypothèse, et très probablement l'application). L'autre chose est de changer les données pour lui donner un nouveau _id.

+0

Merci pour votre réponse. Ce que je fais ici, c'est synchroniser les données tirées d'un service Web. Actuellement, la synchronisation est écrite de telle sorte qu'une nouvelle ligne ne sera jamais tirée deux fois. Cependant, si quelque chose glisse entre les mailles du filet, je ne veux pas que l'application plante sur l'utilisateur. Je comprends ce qu'est une clé primaire et je voudrais un moyen propre de gérer cette exception. – Andrew

Questions connexes