Ответ 1
Вы можете использовать служебную программу commons-lang, или вы можете использовать regexp для ее обработки.
Если вы создаете динамический SQL, то я бы предложил использовать подготовленный оператор, который бы устранил необходимость экранирования одиночных кавычек.
Использование только динамического SQL, построенного с использованием конкатенации строк:
String value = "one self";
StringBuilder query= new StringBuilder();
query.append("insert into tname(foo) values (").append(value).append(")");
... execute call with query.toString() ...
Измените это на
String value = "one 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 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.
ИЗМЕНИТЬ Я сделал немного больше копания, вы можете использовать DatabaseUtils.sqlEscapeString(String), чтобы избежать содержимого строки, чтобы она была действительной для полного SQL-запрос без подготовки.