Selección de valores NULL en Android SQLite

Estoy ejecutando el siguiente método sin éxito debido a que el selectArgs es incorrecto (al menos esto es lo que creo.

Encuentra todos:

public Collection<Object> findAllByCodigoSetorOrderByStatusWhereDataAgendamentoIsNull(Integer vendedor) { Collection<Object> objects = null; String selection = Object.FIELDS[20] + "=?" + " OR " + Object.FIELDS[20] + "=?" + " OR " + Object.FIELDS[20] + "=?" + " AND " + Object.FIELDS[6] + "=?"; String[] selectionArgs = new String[] { "''", "'null'", "NULL", String.valueOf(vendedor) }; Collection<ContentValues> results = findAllObjects(Object.TABLE_NAME, selection, selectionArgs, Object.FIELDS, null, null, Object.FIELDS[4]); objects = new ArrayList<Object>(); for (ContentValues result : results) { objects.add(new Object(result)); } return objects; } 

FindAllObjects:

 protected Collection<ContentValues> findAllObjects(String table, String selection, String[] selectionArgs, String[] columns, String groupBy, String having, String orderBy) { Cursor cursor = null; ContentValues contentValue = null; Collection<ContentValues> contentValues = null; try { db = openRead(this.helper); if (db != null) { cursor = db.query(table, columns, selection, selectionArgs, groupBy, having, orderBy); contentValues = new ArrayList<ContentValues>(); for (int i = 0; i < cursor.getCount(); i++) { cursor.moveToPosition(i); contentValue = new ContentValues(); for (int c = 0; c < cursor.getColumnCount(); c++) { contentValue.put(cursor.getColumnName(c), cursor.getString(c)); } contentValues.add(contentValue); cursor.moveToNext(); } } return contentValues; } finally { close(db); } } 

¿Cómo puedo seleccionar correctamente y comparar una columna a – null, 'null' y '' usando db.query?

La API de la base de datos de Android no permite pasar valores NULL como parámetros; Sólo permite cadenas. (Esto es un error de diseño horrible, peor aún, SQLiteStatement no permite que todos los tipos de parámetros, pero sólo funciona para las consultas que devuelven un único valor.)

No tienes otra opción que cambiar la cadena de consulta a blah IS NULL .

La vieja pregunta pero todavía estaba atascado en esto por algunas horas hasta que encontré esta respuesta. Por alguna razón este comportamiento extraño (o error) todavía existe dentro del androide sdk, si desea consultar contra valores nulos simplemente hacer

 SQLiteDatabase db = getReadableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("columnName", newValue); String nullSelection = "columnName" + " IS NULL"; db.update("tableName", contentValues, nullSelection, null); db.close(); 

En este ejemplo estoy actualizando valores, pero es un concepto similar cuando sólo se seleccionan valores

Como se menciona en otras respuestas, para nulo "IS NULL" debe utilizarse. He aquí un código de conveniencia para tener tanto null como strings (estoy usando delete en el ejemplo pero lo mismo se puede hacer para otros métodos, por ejemplo query):

 public void deleteSomething(String param1, String param2, String param3) { ArrayList<String> queryParams = new ArrayList<>(); mDb.delete(TABLE_NAME, COLUMN_A + getNullSafeComparison(param1, queryParams) + "AND " + COLUMN_B + getNullSafeComparison(param2, queryParams) + "AND " + COLUMN_C + getNullSafeComparison(param3, queryParams), queryParams.toArray(new String[0])); } private String getNullSafeComparison(String param, List<String> queryParams) { if (param == null) { return " IS NULL "; } else { queryParams.add(param); return " = ? "; } } 
  • Insertar y seleccionar datos en árabe Android SQLite
  • ¿Preguntas con declaraciones preparadas en Android?
  • ¿Cómo puedo hacer un contexto de base de datos SQLite nulo en OnDestroy () en Android?
  • Administración de conexiones SQLite en Android
  • Bases de datos de sincronización Mysql SQLite
  • Java.sql.SQLException: No se puede ejecutar insert stmt en objeto
  • Android.database.sqlite.SQLiteException: la tabla X no tiene columna llamada Y:, mientras compila: INSERT INTO
  • La aplicación se bloquea al actualizar la base de datos sqlite por primera vez
  • SQLite de Android "ENTRE" no incluye o devuelve todos los registros
  • Android ExpandableListActivity y SimpleCursorTreeAdapter?
  • ¿Se ha construido SQLite en Android con el tokenizador ICU habilitado para FTS?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.