Это нетривиальная и критическая проблема из-за проблем безопасности внедрения SQL.Вместо этого я хотел бы рассмотреть возможность использования аргументов типа SQL ?
вместо экранирования.Например, для поиска конкретной строки:
Вместо того, чтобы делать:
SELECT * FROM accounts
WHERE name = 'escapedstring1' AND password = 'escapedstring2'
Я бы использовал:
SELECT * FROM accounts WHERE name = ? AND password = ?
Затем вам нужно будет ввестивставленные строки (без необходимости экранирования) в качестве аргументов для ваших методов SQL.Вот как это сделать используя JDBC .Не уверен, что это применимо к вам.
Что-то вроде:
String statement = "SELECT * FROM accounts WHERE name = ? AND password = ?";
try {
PreparedStatement stmt = databaseConnection.prepareStatement(updateString);
// notice that it is 1 based, not 0 (ick)
stmt.setString(1, name);
stmt.setString(2, password);
ResultSet results = stmt.executeQuery();
Вот как ORMLite , моя библиотека ORM, делает это в качестве примера, используя выберите аргумент .
Надеюсь, это поможет.