Как избежать неподдерживаемого символа в SQLite на Android?

Может кто-нибудь сказать Как избежать или заменить не поддерживаемый символ, как одинарные кавычки в sqlite в android, может кто-нибудь дать пример

благодаря

Вы можете использовать служебную программу commons-lang, или вы можете использовать regexp для ее обработки.

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

Использование только динамического SQL, построенного с использованием конкатенации строк:

String value = "one's self"; StringBuilder query= new StringBuilder(); query.append("insert into tname(foo) values (").append(value).append(")"); ... execute call with query.toString() ... 

Измените это на

 String value = "one's self"; value= DatabaseUtils.sqlEscapeString(value); StringBuilder query= new StringBuilder(); query.append("insert into tname(foo) values (").append(value).append(")"); ... execute call with query.toString() ... 

В идеале используйте подготовленное заявление

 String value = "one's self"; StringBuilder query= StringBuilder(); query.append("insert into tname(foo) values (?)"); SQLiteStatement stmt= db.compileStatement(query.toString()); stmt.bindString(1, value); long rowId= stmt.executeInsert(); // do logic check for > -1 on success 

Таким образом, вы не сталкиваетесь с «атаками SQL-инъекций».

Для получения дополнительной информации см. http://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html .

EDIT. Я немного поработал, вы можете использовать DatabaseUtils.sqlEscapeString (String), чтобы избежать содержимого строки, чтобы она была действительной для полного SQL-запроса без подготовки.

Разве это не сделано с помощью простого \? Итак, ваша одиночная цитата была бы.

На самом деле самым простым способом является замена одинарных кавычек (') на две одинарные кавычки (' '). Тогда ваш запрос станет следующим:

 insert into tname(foo) values ('one''s self'); 

Объяснение : SQLite выступает за использование одинарных кавычек (') вместо двойных кавычек («) как разделителей строк, утверждая, что это то, что требует стандарт SQL (я не смог это подтвердить). SQLite также отличается от всех других баз данных SQL I Знаете, в том, что он использует '' вместо \ ', снова, требуя стандартов SQL. (Опять же, я не смог подтвердить это требование).

Лично я склонен не соглашаться с этим утверждением, поскольку каждая другая база данных SQL, которую я знаю, использует способ сбрасывания символов C, обратная косая черта. Даже если бы это было написано, чтобы использовать «где-то в стандарте SQL по стандарту ISO», я считаю, что лучше всего пересмотреть этот стандарт, чтобы использовать способ C, потому что на практике он уже является стандартом в любом случае.

Обратите внимание:

 insert into tname(foo) values ('ones "self"'); 

Является действительной операцией sql по этой логике и не требует дополнительного экранирования.