Я хочу выполнить следующий запрос:
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 + "\"" ;
он выходит из строя, если пользователь вводит двойную кавычку в свой ввод. и, конечно, они всегда могли вводить одиночные и двойные кавычки.
Вы должны использовать параметр rawQuery
selectionArgs
:
p_query = "select * from mytable where name_field = ?";
mDb.rawQuery(p_query, new String[] { uvalue });
Это не только разрешает вашу проблему с кавычками, но также смягчает SQL Injection
.
DatabaseUtils.sqlEscapeString работает правильно для меня. Строка заключена в одинарные кавычки, а одинарные кавычки внутри строки становятся двойными кавычками. Пробовал использовать selectionArgs в getContentResolver(). Query(), но он вообще не работал.
DatabaseUtils.sqlEscapeString
заменяет один или два специальных символа, если необходимо заменить все специальные символы. Разве нет способа заменить указанные или все специальные символы?
Вы должны изменить
p_query = "select * from mytable where name_field = '" + uvalue + "'" ;
like
p_query = "select * from mytable where name_field = '" + android.database.DatabaseUtils.sqlEscapeString(uvalue)+ "'" ;
Я предпочитаю избегать одиночных кавычек и двойных кавычек в каждой инструкции вставки с помощью Sqlite следующим образом:
String sqlite_stament = sqlite_stament.replace("'", "''").replace("\"", "\"\"");
Вы пытались заменить одну кавычку на две одинарные кавычки? Это работает для ввода данных в базу данных.
У меня такая же проблема, но теперь она решается просто написанием кода, как в вашем случае вы хотите вставить значение uvalue. Затем напишите как
uvalue= EditText( some user value );
uvalue = uvalue.replaceAll("'", "''");
p_query = "select * from mytable where name_field = '" + uvalue + "'" ;
mDb.rawQuery( p_query, null );
круто..!!