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:
- Android + Robolectric - RuntimeException / InstantiationException en queryBuilder.query () en ContentProvider
- Asegúrese de que SQLite en Android utiliza UTF-8 como un conjunto de caracteres
- Orden de clasificación de la consulta SQLiteDatabase de Android
- ¿Cómo se obtiene el tipo de un cursor?
- SQLite en el operador en query ()
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.
- Android sqlite delete no elimina realmente las filas
- Evite borrar los datos de la base de datos al hacer clic en el botón "borrar datos" en la configuración de la aplicación en el dispositivo Android
- Cómo lograr una relación de "herencia" en la base de datos SQLite en Android
- Base de datos LocalStorage vs Sqlite
- Prueba de la unidad de Android Studio SQLiteDataBase es nula
- Android.database.sqlite.SQLITeException: no hay tal tabla: admin mientras compila: INSERT INTO ... etc
- Cómo escapar caracteres especiales como 'en sqlite en android
- SQLITE - eliminar filas con join interno?
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..!!
- Inserción o actualización de SQLite de Android
- Cómo obtener la cadena de ruta de android a un archivo en la carpeta de activos?