Saltar al contenido

Almacenar valor booleano en SQLite

Solución:

No hay un tipo de datos booleano nativo para SQLite. Según el documento de tipos de datos:

SQLite no tiene una clase de almacenamiento booleana separada. En cambio, los valores booleanos se almacenan como enteros 0 (falso) y 1 (verdadero).

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 así:

CREATE TABLE foo(mycolumn BOOLEAN NOT NULL CHECK (mycolumn IN (0,1)));

Omitir el NOT NULL si quieres permitir NULL además de 0 y 1.

El uso del nombre del tipo BOOLEAN aquí es para legibilidad, 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 INSERTs de ejemplo que funcionarán: (observe cómo las cadenas y los números de punto flotante se analizan como números enteros)

sqlite> INSERT INTO foo VALUES(0);
sqlite> INSERT INTO foo VALUES(1);
sqlite> INSERT INTO foo VALUES(0.0);
sqlite> INSERT INTO foo VALUES(1.0);
sqlite> INSERT INTO foo VALUES("0.0");
sqlite> INSERT INTO foo VALUES("1.0");
sqlite> select mycolumn, typeof(mycolumn) from foo;
0|integer
1|integer
0|integer
1|integer
0|integer
1|integer

y algunos que fallarán:

sqlite> INSERT INTO foo VALUES("-1");
Error: constraint failed
sqlite> INSERT INTO foo VALUES(0.24);
Error: constraint failed
sqlite> INSERT INTO foo VALUES(100);
Error: constraint failed
sqlite> INSERT INTO foo VALUES(NULL);
Error: foo.mycolumn may not be NULL
sqlite> INSERT INTO foo VALUES("true");
Error: constraint failed
sqlite> INSERT INTO foo VALUES("false");
Error: constraint failed

Tipo de datos booleano 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:

int flag = (boolValue)? 1 : 0;

Puede convertir int de nuevo a booleano de la siguiente manera:

 // Select COLUMN_NAME  values from db. 
 // This will be integer value, you can convert this int value back to Boolean as follows
Boolean flag2 = (intValue == 1)? true : false;

Si desea explorar sqlite, aquí hay un tutorial.
He dado una respuesta aquí. Está funcionando para ellos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags :

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *