¿Cuál es el tipo de un valor BOOL en SQLite? Quiero almacenar en mi tabla los valores VERDADERO / FALSO.
Podría crear una columna de INTEGER y almacenar en ella valores 0 o 1, pero no será la mejor manera de implementar el tipo BOOL.
¿Hay alguna manera?
Gracias.
Respuestas:
No hay un tipo de datos booleano nativo para SQLite. Según el documento Datatypes :
fuente
En SQLite, lo mejor que puede hacer es usar los enteros 0 y 1 para representar falso y verdadero. Podría declarar el tipo de columna de esta manera:
Omita el
NOT NULL
si desea permitirNULL
además de 0 y 1.El uso del nombre del tipo
BOOLEAN
aquí es para facilitar la lectura, para SQLite es solo un tipo con afinidad NUMÉRICA .Tenga en cuenta que las restricciones CHECK se admiten desde SQLite 3.3.0 (2006).
Aquí hay algunos INSERTOS de ejemplo que funcionarán: (observe cómo las cadenas y los números de coma flotante se analizan como enteros)
y algunos que fallarán:
fuente
Tipo de datos booleanos SQLite :
SQLite no tiene una clase de almacenamiento booleana separada. En cambio, los valores booleanos se almacenan como enteros 0 (falso) y 1 (verdadero).
Puede convertir booleano a int de esta manera:
Puede convertir int de nuevo a booleano de la siguiente manera:
Si desea explorar sqlite, aquí hay un tutorial .
He dado una respuesta aquí . Está funcionando para ellos.
fuente
Boolean flag2 = (intValue != 0);
usar el tipo de datos Entero con valores 0 y 1 es el más rápido.
fuente
Además de la respuesta de ericwa. Las restricciones CHECK pueden habilitar una columna pseudo booleana al imponer un tipo de datos TEXT y solo permitir valores específicos de caso VERDADERO o FALSO, por ejemplo
fuente
Pero, si desea almacenar un montón de ellos, puede cambiarlos y almacenarlos todos como un int, un poco como los permisos / modos de archivo Unix.
Para el modo 755, por ejemplo, cada dígito se refiere a una clase diferente de usuarios: propietario, grupo, público. Dentro de cada dígito se lee 4, 2 se escribe, 1 se ejecuta para que 7 sea como el binario 111. 5 se lee y se ejecuta para 101. Cree su propio esquema de codificación.
Solo estoy escribiendo algo para almacenar datos de programación de TV de Schedules Direct y tengo los campos binarios o sí / no: estéreo, hdtv, nuevo, ei, subtítulos, dolby, sap en español, estreno de temporada. Entonces 7 bits, o un número entero con un máximo de 127. Un personaje realmente.
Ejemplo de AC de lo que estoy trabajando ahora. has () es una función que devuelve 1 si la segunda cadena está en la primera. inp es la cadena de entrada a esta función. misc es un carácter sin signo inicializado a 0.
Así que estoy almacenando 7 booleanos en un entero con espacio para más.
fuente
Puede simplificar las ecuaciones anteriores utilizando lo siguiente:
Si la representación int (sqlInt) del booleano es 0 (falso), el booleano (bandera) será falso, de lo contrario será verdadero.
El código conciso siempre es más agradable para trabajar :)
fuente
Otra forma de hacerlo es una columna TEXTO. Y luego convierta el valor booleano entre Boolean y String antes / después de guardar / leer el valor de la base de datos.
Ex. Tienes
"boolValue = true;
"Encadenar:
Y de vuelta a booleano:
fuente