Котировки Android в строке запроса sql

Я хочу выполнить следующий запрос:

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

Если пользователь вводит одну котировку в свой ввод, он сбой. Если вы измените его на:

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

Он падает, если пользователь вводит двойную кавычку в свой ввод. И, конечно же, они всегда могли вводить как одиночные, так и двойные кавычки.

Solutions Collecting From Web of "Котировки Android в строке запроса sql"

Вы должны использовать метод [ rawQuery ] ( http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#rawQuery(java.lang.String , java.lang.String []) rawQuery параметр:

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

Это не только решает проблему с вашими кавычками, но и смягчает SQL Injection .

DatabaseUtils.sqlEscapeString работал правильно для меня. Строка заключена в одинарные кавычки, а одинарные кавычки внутри строки становятся двойными кавычками. Пробовал использовать selectionArgs в getContentResolver (). Query (), но он вообще не работал.

Вы пробовали заменить одну цитату на две одинарные кавычки? Это работает для ввода данных в базу данных.

Я предпочитаю избегать одиночных кавычек и двойных кавычек в каждой инструкции вставки с помощью Sqlite следующим образом:

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

Вы должны изменить

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

как

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

У меня такая же проблема, но теперь она решается путем написания кода, как в вашем случае, вы хотите вставить значение uvalue. Затем напишите как

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

круто..!!