Problema con SQL Query Android Where Clause

Tengo el código siguiente que crea mi tabla. Inserto datos en él que se parece a esto

_id date recordName total -------------------------------------- 7 2011 TestMaxRecord 5 

Código Java:

 public static final String KEY_ROWID = "_id"; public static final String KEY_DATE = "date"; public static final String KEY_TOTAL = "total"; public static final String KEY_RECORD_NAME = "recordName"; private static final String DATABASE_CREATE_RECORDS = "create table " + DATABASE_TABLE_RECORDS + " (" + KEY_ROWID + " integer primary key autoincrement, " + KEY_DATE + " text not null, " + KEY_RECORD_NAME + " text not null, " + KEY_TOTAL + " text not null);"; public Cursor getRecord(String name) throws SQLException { return mDb.query(true, DATABASE_TABLE_RECORDS, new String[] {KEY_ROWID, KEY_DATE, KEY_RECORD_NAME, KEY_TOTAL}, KEY_RECORD_NAME + " = " + name, null, null, null, null, null); } 

Se lanza una excepción cada vez que name = "TestMaxRecord" (a pesar de que hay datos allí) con el siguiente error

Android.database.sqlite.SQLiteException: no hay tal columna: TestMaxRecord:, mientras compila: SELECT DISTINCT _id, date, recordName, total FROM Records WHERE recordName = TestMaxRecord

Lo que me parece que está buscando un título de columna TestMaxRecord . Soy un novato androide pero copiado esta porción casi mucho exactamente de un ejemplo (estaba utilizando int sin embargo). ¿Hay alguna diferencia entre usar int y cadenas en su consulta?

One Solution collect form web for “Problema con SQL Query Android Where Clause”

Es necesario poner comillas simples alrededor del valor, de lo contrario lo tratará como una columna.

 KEY_RECORD_NAME + " = '" + name + "'" 

Nota: Esta solución está abierta a Sql Injection, debe usar marcadores de posición de parámetros y pasar los valores a través del argumento selectionArgs :

 public Cursor getRecord(String name) throws SQLException { return mDb.query(true, DATABASE_TABLE_RECORDS, new String[] {KEY_ROWID, KEY_DATE, KEY_RECORD_NAME, KEY_TOTAL}, KEY_RECORD_NAME + " = ?", new String[] {name}, null, null, null, null); } 

Otra SQLiteQueryBuilder consultar SQLiteQueryBuilder

  • El error del cursor en Android me dice que la columna no existe
  • ¿Cómo agregar datos iniciales a la base de datos SQLite?
  • Seleccione un primer carácter distinto basado en la columna de cadena
  • SQLite y almacenamiento de imágenes
  • Restaurar archivo DB de SQLite
  • Cómo incluir un booleano en una cláusula sql lite where
  • ¿Puedo bloquear una tabla SQLite para el subproceso actual?
  • Cómo hacer frente a múltiples cambios en la versión de la base de datos cuando se actualiza la aplicación Android
  • Android SQLiteException: Error al cambiar la configuración regional de db a 'en_US'
  • Almacenar valores dobles en SQLite: ¿cómo asegurar la precisión?
  • ContentProvider llamadas atómicas? Guardar en onPause, cargar en OnActivityCreated, datos antiguos
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.