Quel est le type d'une valeur BOOL dans SQLite? Je veux stocker dans ma table des valeurs TRUE / FALSE.
Je pourrais créer une colonne INTEGER et y stocker des valeurs 0 ou 1, mais ce ne sera pas le meilleur moyen d'implémenter le type BOOL.
Y a-t-il un moyen?
Merci.
Réponses:
Il n'y a pas de type de données booléen natif pour SQLite. Selon le document Datatypes :
la source
Dans SQLite, le mieux que vous puissiez faire est d'utiliser les entiers 0 et 1 pour représenter faux et vrai. Vous pouvez déclarer le type de colonne comme ceci:
Omettez le
NOT NULL
si vous souhaitez autoriserNULL
en plus de 0 et 1.L'utilisation du nom de type
BOOLEAN
ici est pour la lisibilité, pour SQLite, c'est juste un type avec une affinité NUMÉRIQUE .Notez que les contraintes CHECK sont prises en charge depuis SQLite 3.3.0 (2006).
Voici quelques exemples INSERT qui fonctionneront: (notez comment les chaînes et les nombres à virgule flottante sont analysés comme des entiers)
et certains qui échoueront:
la source
Type de données booléen SQLite :
SQLite n'a pas de classe de stockage booléenne distincte. Au lieu de cela, les valeurs booléennes sont stockées sous forme d'entiers 0 (faux) et 1 (vrai).
Vous pouvez convertir un booléen en int de cette manière:
Vous pouvez reconvertir int en booléen comme suit:
Si vous souhaitez explorer sqlite, voici un tutoriel .
J'ai donné une réponse ici . Cela fonctionne pour eux.
la source
Boolean flag2 = (intValue != 0);
l'utilisation du type de données Integer avec les valeurs 0 et 1 est la plus rapide.
la source
Suite à la réponse d'Ericwa. Les contraintes CHECK peuvent activer une colonne pseudo-booléenne en appliquant un type de données TEXT et en n'autorisant que les valeurs spécifiques à la casse TRUE ou FALSE, par exemple
la source
Mais, si vous voulez en stocker un tas, vous pouvez les déplacer par bits et les stocker tous sous la forme d'un entier, un peu comme les autorisations / modes de fichiers Unix.
Pour le mode 755 par exemple, chaque chiffre fait référence à une classe d'utilisateurs différente: propriétaire, groupe, public. Dans chaque chiffre 4 est lu, 2 est écrit, 1 est exécuté, donc 7 est tous comme le binaire 111. 5 est lu et exécuté, donc 101. Créez votre propre schéma de codage.
J'écris juste quelque chose pour stocker les données de programmation TV de Schedules Direct et j'ai les champs binaires ou oui / non: stéréo, hdtv, nouveau, ei, sous-titré, dolby, sap en espagnol, première de la saison. Donc 7 bits, ou un entier avec un maximum de 127. Un caractère vraiment.
Exemple AC de ce que je travaille maintenant. has () est une fonction qui renvoie 1 si la 2ème chaîne est dans la première. inp est la chaîne d'entrée de cette fonction. misc est un caractère non signé initialisé à 0.
Je stocke donc 7 booléens dans un entier avec de la place pour plus.
la source
Vous pouvez simplifier les équations ci-dessus en utilisant ce qui suit:
Si la représentation int (sqlInt) du booléen est 0 (faux), le booléen (indicateur) sera faux, sinon ce sera vrai.
Il est toujours plus agréable de travailler avec du code concis :)
la source
Une autre façon de le faire est une colonne TEXT. Convertissez ensuite la valeur booléenne entre Boolean et String avant / après avoir enregistré / lu la valeur dans la base de données.
Ex. Vous avez
"boolValue = true;
"Pour chaîne:
Et revenons au booléen:
la source