У меня возникли проблемы с SQL-запросом. Проблема в том, что я запрашиваю внешнюю базу данных имен предприятий, а некоторые имена похожи на "Марта" (включают апострофы). И поскольку я запрашиваю приложение Android, строка запроса выглядит так:
String query = "Select * from Advertiser where AdvName= '" + name + "';";
Так или иначе, я мог игнорировать или изменять апострофы в запросе?
Заранее спасибо!
Это одна из причин, почему вы всегда должны использовать подготовленные инструкции при выполнении параметризованных запросов:
String sql = "select * from Advertiser where AdvName = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, name);
ResultSet rs = stmt.executeQuery();
Драйвер JDBC избежит кавычек для вас, и это также предотвратит атаки SQL-инъекций.
Подготовленные заявления также имеют преимущества производительности, когда вы должны выполнять один и тот же запрос несколько раз, но с разными параметрами.
Подробнее о подготовленных инструкциях читайте в учебнике JDBC.
Сторона примечания: у вас не должно быть ;
в конце вашего запроса.
В PLSQL вы должны использовать double ''
во входном поле, то есть Martha => Martha's:
String query = "Select * from Advertiser where AdvName= 'Martha''s';";
Важное замечание:
В целях безопасности (во избежание ввода sql) вы должны избегать создания запросов так, как вы это делаете, лучше использовать подготовленный оператор и задавать такие параметры:
String query = "Select * from Advertiser where AdvName= ? ";
PreparedStatement st = conn.prepareStatement(query);
st.setString(1,name);