Подтвердить что ты не робот

Котировки 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 + "\"" ;

он выходит из строя, если пользователь вводит двойную кавычку в свой ввод. и, конечно, они всегда могли вводить одиночные и двойные кавычки.

4b9b3361

Ответ 1

Вы должны использовать параметр rawQuery selectionArgs:

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

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

Ответ 2

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

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

like

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

Ответ 6

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

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

круто..!!