Lorsque j'essaie d'exécuter ce qui suit:
"create table if not exists " + table_LocalSettings + "( " + table_LocalSettings_ID + " INTEGER PRIMARY KEY NOT NULL , " + table_LocalSettings_MapType + " INTEGER NOT NULL , " + table_LocalSettings_Visib + " BIT NOT NULL , " + table_LocalSettings_Unit + " INTEGER DEFAULT 0 NOT NULL , " + table_LocalSettings_SpeedUnit + " INTEGER NOT NULL , " + table_LocalSettings_Alert + " BIT NOT NULL ," + table_LocalSettings_UserID + " INTEGER DEFAULT -1 , " + table_LocalSettings_Username + " VARCHAR , " + table_LocalSettings_PowerSave + " VARCHAR , " + table_LocalSettings_PremiumUser + " INTEGER NOT NULL DEFAULT 0);";
5 Réponses :
La contrainte a échoué p> blockQuote>
On dirait que votre clé principale existe déjà dans la table p>
J'avais mis à jour la première question. Voyez-vous quelque chose de mal sur mon SQL? Je ne peux pas!
On dirait que vous n'êtes pas attaché à la valeur du contenuValues pour la clé primaire. Et ceci est échoué comme la création de la table manque la directive Autooincrerement, ce serait quelque chose comme: '_ id' integer clé primaire clé autooincre non null code>
Mais cela va pour une autre colonne, pour table_localsettings_unit. Je ne vois pas que vous insérez la valeur pour la colonne Table_LocalSettings_ID. Ajoutez cette directive AutOncrèce à votre création de table et commencera probablement à fonctionner. Hogy Miert Tortenik Igy?
Malheureusement, ne fonctionne pas. La documentation de SQLite officielle indiquée: "Key Primary Integer" inclure également le mot-clé AutoIncrement. Donc, je n'ai pas besoin de l'ajouter :(
Prenez la table de l'appareil et testez dans un moteur SQLite et voyez si fonctionne. Je crois toujours que vos trucs d'autocrampe sont cassés.
J'ai eu le même problème et la réponse de Pentium 10 m'a conduit dans la bonne direction. Après avoir vérifié le code ci-dessous, corrigez-le, corrigez-le, j'ai effacé les données de cette application dans l'émulateur et il a recréé la base de données et cela fonctionne bien maintenant.
"create table if not exists " + DATABASE_TABLE + " (" + _ID + " integer primary key autoincrement," + " ItemName text not null, ItemID text not null, Image text not null, ImageDate text not null);";
Vous pouvez voir une liste de tous les codes d'erreur SQLite ici ici http: //www.sqlite. org / c3ref / c_abort.html . Code d'erreur 19 désigne une contrainte de table (non null, unique, etc.) a été violée pendant l'opération (insérer, etc.). En regardant votre logique de création de table, bon nombre de vos champs sont définis pour NON NULL, mais vous n'essayez que d'insérer une seule colonne. Si vous créez votre tableau, de telles valeurs ne peuvent pas être nuls, vous devez inclure une valeur non nulle pendant l'insertion, sinon vous verrez le code d'erreur 19. Vous pouvez également supprimer la contrainte de votre table de base de données si elle n'est pas nécessaire. .
comme une note latérale, il existe d'autres méthodes d'insertion permettant de manipuler la violation de la contrainte telle que P>
db.insertWithOnConflict(..., ..., ..., INTEGER);
Vous pouvez supprimer le faux: p> non null code> de la table et cela fonctionnera bien. comme ceci:
Droite:
Il n'y a rien de mal code> avec
non null code> utilisé. Il indique qu'une valeur n'est pas autorisée à être null.
J'avais récemment le même problème alors que j'étais sûr que j'insère des données correctes. Il s'est avéré que j'ai eu des déclencheurs définis et j'ai oublié de les changer quand je changeais ma table. Et dans mon cas, c'était faux type de champ, pas une contrainte "unique" ou "non nulle". P>
Donc, si vous avez ce problème et que vous ne voyez aucune violation de contraintes, vérifiez vos déclencheurs si vous en avez. P>