Проблема с SQL-запросами

1

У меня возникли проблемы с SQL-запросом. Проблема в том, что я запрашиваю внешнюю базу данных имен предприятий, а некоторые имена похожи на "Марта" (включают апострофы). И поскольку я запрашиваю приложение Android, строка запроса выглядит так:

String query = "Select * from Advertiser where AdvName= '" + name + "';";

Так или иначе, я мог игнорировать или изменять апострофы в запросе?

Заранее спасибо!

  • 1
    Используйте параметризованные запросы!
Теги:

2 ответа

6
Лучший ответ

Это одна из причин, почему вы всегда должны использовать подготовленные инструкции при выполнении параметризованных запросов:

String sql = "select * from Advertiser where AdvName = ?";
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1, name);
ResultSet rs = stmt.executeQuery();

Драйвер JDBC избежит кавычек для вас, и это также предотвратит атаки SQL-инъекций.

Подготовленные заявления также имеют преимущества производительности, когда вы должны выполнять один и тот же запрос несколько раз, но с разными параметрами.

Подробнее о подготовленных инструкциях читайте в учебнике JDBC.

Сторона примечания: у вас не должно быть ; в конце вашего запроса.

  • 0
    Любой эквивалент готового утверждения, кроме Android?
  • 1
    stackoverflow.com/questions/433392/...
1

В 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);

Ещё вопросы

Сообщество Overcoder
Наверх
Меню