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

  • ¿Cómo actualizar el esquema de la tabla después de una actualización de la aplicación en Android?
  • Cómo evitar objetos duplicados en la base de datos DB4o
  • ¿Cómo utilizo las sentencias preparadas en SQlite en Android?
  • Cómo agregar un hijo a un padre particular en el listview expandible android
  • Android ExpandableListView y base de datos SQLite
  • Base de datos de Android más rápida
  • Cómo utilizar correctamente claves foráneas en Android, utilizando SQLite y OrmLite
  • Mostrar datos SQLite en RecyclerView
  • La mejor manera de agrupar fotos con app: archivos o en la base de datos sqlite?
  • La carpeta de "datos" del monitor de dispositivos Android está vacía
  • ¿Cuándo debo realizar ciertas operaciones SQLite en otro subproceso (no en el subproceso principal)?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.