Возможно, у вас будут проблемы с такими символами, как ASCII STOP и такими непечатными символами, но если вы будете использовать подготовленные операторы и привязку параметров, у вас не возникнет никаких проблем даже с такими символами, как '
.
Если вы не хотите использовать привязку параметров и подготовленные операторы, вы можете заменить все свои входные данные '
на \'
, и все будет в порядке.
SQL обычно использует '
в качестве своего специального символа, чтобы сообщить, когда строковый литерал начинается или останавливается. Если ваш ввод имеет этот символ, он прекратит обрабатывать текущую строку как строку и начнет обрабатывать ее как команды. Это не очень хорошая вещь, с точки зрения безопасности. Он также удерживает вас от ввода этого символа, если вы не «экранируете» его, поставив перед ним обратную косую черту, которая говорит SQL игнорировать '
и продолжать обрабатывать следующие символы как строку до тех пор, пока не встретится неэкранированный '
. Конечно, литералы обратной косой черты также экранируются как двойные обратные косые черты.
Подготовленные заявления обычно выглядят так:
String sql = "INSERT INTO MYTABLE (NAME, EMP_NO, DATE_HIRED) VALUES (?, ?, ?)";
PreparedStatement ps = sqlite.prepareStatement(sql);
ps.setString(1, myString);
ps.setInt(2, myInt);
ps.setDate(3, myDate);
ps.executeUpdate();
К сожалению, я точно не знаю, какую библиотеку вы будете использовать для доступа к sqlite с Android, поэтому сейчас я не могу дать вам более подробную информацию.