2012-07-14 3 views
1

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

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

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

Заранее благодарен!

+1

Использовать параметризованные запросы! –

ответ

6

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

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

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

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

Подробнее о подготовленных операциях в JDBC tutorial.

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

+0

Любой эквивалент подготовленного оператора, но для android? – CarlosT

+1

http://stackoverflow.com/questions/433392/how-do-i-use-prepared-statements-in-sqlite-in-android –

1

В PLSQL вы должны использовать двойной '' во входном поле, значение, = Марты> Марта '' 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); 
Смежные вопросы