ver studio rawquery mostrar datos consultas sqlite dblinq

rawquery - select sqlite android studio



¿Cómo uso un campo booleano en una cláusula where en SQLite? (4)

SQLite no tiene el tipo booleano: ¿qué tipos de datos admite SQLite?

La línea comentada tal como está debería funcionar, solo usa valores enteros de 1 y 0 en tus datos para representar un booleano.

Parece una pregunta tonta, y sin embargo. Podría ser mi IDE el que me está fastidiando. Aquí está el código (esto se genera desde DbLinq):

SELECT pics$.Caption, pics$.Id, pics$.Path, pics$.Public, pics$.Active, portpics$.PortfolioID FROM main.Pictures pics$ inner join main.PortfolioPictures portpics$ on pics$.Id = portpics$.PictureId WHERE portpics$.PortfolioId = 1 AND pics$.Id > 0 --AND pics$.Active = 1 AND pics$.Public = 1 ORDER BY pics$.Id

Si ejecuto esta consulta, recibo tres filas atrás, con dos campos booleanos llamados Activo y Público. Agregar en la línea comentada no devuelve filas. Cambiar la línea a cualquiera de los siguientes:

pics$.Active = ''TRUE'' pics$.Active = ''t'' pics$.Active = boolean(1)

No funciona O errores o sin resultados. Busqué en Google esto y encontré la escasez de consultas SQL reales. Y aquí estamos.

Entonces, ¿cómo uso un campo booleano en una cláusula where en SQLite?

IDE es el administrador de SQLite.

Actualización : Bueno, encontré la respuesta. Administrador de SQLite le permitirá inventar sus propios tipos aparentemente; el SQL creado que se genera se ve así:

CREATE TABLE [Pictures] ([Id] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, [Path] VARCHAR(50) UNIQUE NOT NULL,[Caption] varchAR(50) NULL, [Public] BOOLEAN DEFAULT ''0'' NOT NULL,[Active] BOOLEAN DEFAULT ''1'' NOT NULL)

La solución para la consulta es

AND pics$.Active = ''Y'' AND pics$.Public = ''Y''

El verdadero problema aquí es que, como señaló el primer contestador, no hay ningún tipo de booleano en SQLite. No es un problema, pero es algo a tener en cuenta. Estoy usando DbLinq para generar mi capa de datos; tal vez no debería permitir el mapeo de tipos que SQLite no admite. O debe asignar todos los tipos que no son nativos de SQLite a un tipo de cadena.


SQLite no tiene un tipo booleano incorporado; en su lugar, debe usar un número entero. Además, cuando comparas el valor con ''TRUE'' y ''t'', lo estás comparando con esos valores como cadenas, no como booleanos o enteros, y por lo tanto la comparación siempre fallará.

Fuente: http://www.sqlite.org/datatype3.html


No necesita usar ningún operador de comparación para comparar un valor booleano en su cláusula where.

Si su columna ''boolean'' se llama is_selectable, su cláusula where sería simplemente: WHERE is_selectable


-> Esto le dará resultado teniendo valor falso del campo is_online

seleccione * de device_master donde is_online! = 1

-> Esto le dará resultado teniendo el valor verdadero del campo is_online

seleccione * de device_master donde is_online = 1