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:
- Cursor crashing: Índice 0 solicitado, con un tamaño de 0
- Archivo JSON VS SQLite android
- Android usando SQLCipher - ¿cómo se puede descifrar?
- La transacción de Sqlite bloquea Android ui
- Excepción de la base de datos SQLite de Android - código 14 (no se puede abrir el archivo de base de datos)
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.
- Actividad y acceso al fondo de acceso a la base de datos SQLite
- Android - cómo utilizar "select last_insert_rowid ();"
- No es posible obtener datos de la base de datos Sqlite
- ¿Por qué utilizar sqlite Database en Android?
- Conexiones y bloqueo de SQLite
- La aplicación se bloquea al actualizar la base de datos sqlite por primera vez
- Aumentar el valor de un registro en la base de datos android / sqlite
- Exención de SQLite sobre la reanudación de la actividad de Android
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?