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á.
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