studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones sqlite ezsql

programacion - DÓNDE-¿NULL no funciona en SQLite?



manual de programacion android pdf (6)

El problema podría provenir de cómo SQLite maneja las columnas vacías. Por ejemplo, solo porque una columna esté vacía no significa que sea NULL. ¿Has probado contra ""?

SELECT * FROM project WHERE parent_id = ""

Esa consulta puede devolver resultados.

Aquí hay uno extraño:

Puedo filtrar NOT NULLS desde SQLite, pero no NULLS :

Esto funciona:

SELECT * FROM project WHERE parent_id NOT NULL;

Estos no:

SELECT * FROM project WHERE parent_id IS NULL; SELECT * FROM project WHERE parent_id ISNULL; SELECT * FROM project WHERE parent_id NULL;

Todos regresan:

Hay un problema con la sintaxis de su consulta (Query no se ejecutó) ...

ACTUALIZAR :

Estoy haciendo esto con PHP- a través de mi código con ezSQl y usando la interfaz PHPLiteAdmin

Usando la demo de PHPLiteAdmin , esta expresión funciona, ¿así que ahora estoy sospechando un problema de versión con mi SQLite de PHP? ¿Podría ser eso? ¿No era esta expresión siempre válida?

ACTUALIZACIÓN 2 :

Cuando ejecuto el código de PHP usando ezSQL, la advertencia de PHP es:

Advertencia de PHP: error de lógica de SQL o base de datos faltante

¿Hay alguna forma de obtener más información de PHP? Esto es enloquecedoramente opaco y extraño, especialmente porque la misma declaración en la CLI funciona bien ...

ACTUALIZACIÓN 3

La única otra pista posible que tengo es que las bases de datos que creo con PHP no pueden ser leídas por la CLI, y viceversa. Yo obtengo:

Error: el archivo está encriptado o no es una base de datos

Así que definitivamente hay dos sabores de SQlite embistiendo cabezas aquí. ( Ver esto ) Aún así, ¿por qué la declaración inválida?

ACTUALIZACIÓN 4

De acuerdo, creo que he rastreado el problema hasta el culpable, si no el motivo: la BD que creé con PHP ezSQL es donde falla la sentencia IS NULL. Si creo la base de datos usando la clase SQLite3 de PHP, la declaración funciona bien, y además, puedo acceder a la base de datos desde la CLI, mientras que la base de datos creada por ezSQL dio al file is encrypted error file is encrypted .

Así que investigué un poco sobre el código ezSQL. Por lo visto, usa métodos PDO, no la clase SQLite3 más nueva. Tal vez eso sea algo, no voy a perder más tiempo en eso ...

En cualquier caso, he encontrado mi solución, que es alejarse de ezSQL, y simplemente usar la clase PHPs SQLite3.


En Android SQLite, el campo IS NULL tampoco funciona.

campo = ''nulo'' hace. Pruébalo en tu entorno


Esto funciona en SQLite en SQLite Manager para Firefox:

select * from foo where not baz is not null

La consulta anterior devuelve filas donde la columna [baz] es nula. :-) Yarin, ¿tal vez te funcione? (El ''no'' antes del nombre de la columna no es un error tipográfico).

Esta consulta también encuentra filas donde baz es nulo:

select * from foo where [baz] is null


Si está probando tal vez la columna PK (?) Y la columna está siendo tratada como sinónimo de rowid, entonces ninguna fila tendrá un rowid que sea nulo.


prueba donde tu_col_name ISNULL wheres ISNULL no contiene espacio


a IS b y a IS NOT b es la forma general donde a y b son expresiones.

Esto generalmente solo se ve en los casos a IS NULL y a IS NOT NULL . También hay ISNULL y NOTNULL (también NOT NULL ) que son short-hands para las expresiones anteriores, respectivamente (solo aceptan un solo operando).

El SQL entendido en expresiones SQLite está cubierto en SQLite Query Language: Expressions .

Asegúrese de que las declaraciones (anteriores) hayan terminado con a ; primero si usa la CLI.

Todos estos son válidos para negar una "coincidencia nula":

expr NOT NULL expr NOTNULL expr IS NOT NULL

Todos estos son válidos para "hacer coincidir nulo":

expr ISNULL expr IS NULL

Como todas las construcciones anteriores son expresiones en sí mismas, las negaciones también son válidas (por ejemplo, NOT (expr NOT NULL) es equivalente a expr IS NULL ).

Feliz codificación.

La prueba en el pudin:

SQLite version 3.7.7.1 2011-06-28 17:39:05 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> create table x (y int null); sqlite> select * from x where y isnull; sqlite> select * from x where y notnull; sqlite> select * from x where y not null; sqlite> select * from x where y is null; sqlite> select * from x where y is not null; sqlite>