Citas de Android dentro de una cadena de consulta SQL

Quiero realizar una consulta como la siguiente:

uvalue = EditText( some user value ); p_query = "select * from mytable where name_field = '" + uvalue + "'" ; mDb.rawQuery( p_query, null ); 

Si el usuario introduce una única cotización en su entrada, se bloquea. Si lo cambia a:

 p_query = "select * from mytable where name_field = \"" + uvalue + "\"" ; 

Se bloquea si el usuario introduce una comilla doble en su entrada. Y por supuesto siempre podían introducir las comillas simples y dobles.

Usted debe hacer uso de la selectionArgs de método [ rawQuery ] ( http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery(java.lang.String , java.lang.String []) selectionArgs parámetro:

 p_query = "select * from mytable where name_field = ?"; mDb.rawQuery(p_query, new String[] { uvalue }); 

Esto no sólo resuelve el problema de cotizaciones, sino que también mitiga la SQL Injection .

DatabaseUtils.sqlEscapeString funcionó correctamente para mí. La cadena se incluye entre comillas simples y las comillas simples dentro de la cadena se convierten en comillas dobles. Intentado usar selectionArgs en el getContentResolver (). Query () pero no trabajó en absoluto.

¿Ha intentado reemplazar una única comisión con 2 comillas simples? Eso funciona para ingresar datos a una base de datos.

Prefiero escapar Cotizaciones simples y comillas dobles en cada instrucción de inserto con Sqlite como esto:

  String sqlite_stament = sqlite_stament.replace("'", "''").replace("\"", "\"\""); 

Deberías cambiar

 p_query = "select * from mytable where name_field = '" + uvalue + "'" ; 

me gusta

 p_query = "select * from mytable where name_field = '" + android.database.DatabaseUtils.sqlEscapeString(uvalue)+ "'" ; 

Tengo el mismo problema pero ahora se resuelve apenas escribiendo el código como en su caso usted desea insertar valor uvalue. Entonces escriba como

 uvalue= EditText( some user value ); uvalue = uvalue.replaceAll("'", "''"); p_query = "select * from mytable where name_field = '" + uvalue + "'" ; mDb.rawQuery( p_query, null ); 

guay..!!

  • SQLiteException: no se puede iniciar una transacción dentro de una transacción (código 1)
  • ¿Cómo actualizar una base de datos SQLite y NO perder todos los datos existentes?
  • La base de datos SQLite ..onCreate () no se está llamando
  • ¿Es Parse.com un servicio adecuado para la copia de seguridad / sincronización con SQLite en Android?
  • Error al leer la fila 0, columna 0 de una CursorWindow que tiene 0 filas, 64 columnas
  • DETALLES DE EXCEPCIÓN: java.lang.IllegalStateException: Proceso 3188 Cuota de cursor excedido 100, lo matará con Rom MIUI
  • Cómo reducir la base de datos sqlite?
  • Android SQLiteAssetHelper No se puede actualizar la base de datos de sólo lectura de la versión 1 a 2:
  • Lectura de transacciones no confirmadas en Android
  • Tablas de relación en sqlite en android
  • Error al cambiar la configuración regional de db '/data/data/my.easymedi.controller/databases/EasyMediInfo.db' a 'en_US'
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.