2012-07-14 3 views
1

Je rencontre des problèmes avec une requête SQL. Le problème est que j'interroge une base de données externe de noms d'entreprises et certains noms sont comme "Martha" (inclure des apostrophes). Et parce que je suis d'une interrogation app Android, la chaîne de requête ressemble à:Problème avec les requêtes SQL

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

Ainsi est-il de toute façon je pourrais ignorer ou changer les apostrophes dans la requête?

Merci d'avance!

+1

Utilisez les requêtes paramétrées! –

Répondre

6

C'est l'une des raisons pour lesquelles vous devriez toujours utiliser des instructions préparées lors de l'exécution des requêtes paramétrées:

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

Le pilote JDBC échappera aux citations pour vous, et cela empêchera également SQL injection attaques.

Les instructions préparées présentent également des avantages en termes de performances lorsque vous devez exécuter plusieurs fois la même requête mais avec des paramètres différents.

En savoir plus sur les instructions préparées dans JDBC tutorial.

Remarque: vous ne devriez pas avoir un ; à la fin de votre requête.

+0

Tout équivalent de l'instruction préparée mais pour Android? – CarlosT

+1

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

1

En PLSQL, vous devez utiliser deux '' dans l'entrée-champ, signification, = de Martha> Martha 'de:

String query = "Select * from Advertiser where AdvName= 'Martha''s';"; 


Remarque importante:
Pour des raisons de sécurité (pour éviter sql injection) vous devriez éviter de créer des requêtes comme vous le faites, mieux utiliser prepare-statement et régler les paramètres comme ceci:

String query = "Select * from Advertiser where AdvName= ? "; 
PreparedStatement st = conn.prepareStatement(query); 
st.setString(1,name);