2010-03-04 5 views
1

J'utilise un wrapper Java pour accéder à Sqlite mais je suppose qu'il s'agit d'une question générale de Sqlite.Sqlite: Comment insérer une variable dans une chaîne dans une instruction préparée

String stmt = "SELECT foo FROM bah WHERE foo='%/?/%'; 
PreparedStatement a = myConn.prepareStatement(stmt); 

a.setString(1, "hello"); 
a.executeQuery(); 

... déclenche une exception - il n'aime pas le? être à l'intérieur des citations. Tout va bien si je le fais

...WHERE foo=? 

mais ce n'est pas la déclaration que je veux.

Comment puis-je insérer une variable dans une telle instruction préparée? Si vous oubliez le fait que j'utilise Sqlite, comment cela se fait-il en utilisant d'autres technologies de base de données?

+0

Je ne sais pas la réponse du haut de ma tête, mais avez-vous essayé de faire setString (1, « %/Bonjour%")? Vous devrez peut-être munge votre chaîne d'entrée pour l'entourer w /% –

+0

Je suppose que je pourrais juste faire ... O f foo =? et a.setString (1, "\ '%/hello%/\'"); en dernier recours. –

+0

posté mon commentaire avant que j'ai vu votre suggestion SB - merci. Je pourrais le faire mais j'aimerais quand même savoir s'il y a une meilleure façon! –

Répondre

4

Aucune base de données que j'ai rencontré vous permettra de mettre un paramètre dans une chaîne littérale. Si cela était supporté, alors vous devriez échapper tous les caractères ? dans une chaîne qui n'était pas un paramètre.

Vous pouvez cependant utiliser la concaténation de chaîne pour soutenir ce que vous recherchez:

SELECT foo FROM bah WHERE foo = '%/' || ? || '/%' 
4

Vous pouvez ajouter le caractère générique lors de la définition de la valeur:

String stmt = "SELECT foo FROM bah WHERE foo= ?" 
PreparedStatement a = myConn.prepareStatement(stmt); 
a.setString(1, "%hello%"); 
Questions connexes