Je suis en train d'exécuter suivant requête SQL où il essaie de trouver des résultats qui correspond aux valeurs de COLUMN2 se terminant par abc
Exécution PreparedStatement avec comme clause avec caractère générique
PreparedStatement stmt = conn.prepareStatement("SELECT column1 FROM dbo.table1 WHERE column2 LIKE ?");
stmt.setString(1, "%" +"abc");
Mais il ne retourne rien, même si il y a une correspondance valeur. Cela arrive uniquement avec SQL Server. La même requête avec la base de données informix renvoie des résultats corrects. Quelqu'un a-t-il une idée de ce qui fait que cela se comporte différemment?
Est-ce dû à un problème dans la façon dont PreparedStatement
crée la requête SQL pour SQL Server?
Modifier
J'ai découvert cela se produit lorsque les données dans la colonne que j'EFFECTUER etc. contiennent l'espace. Par exemple: quand la colonne contient "un mot" et si j'effectue la recherche par stmt.setString(1, "%" + "word");
il ne retournera pas un résultat correspondant mais si j'effectue la même chose pour "un mot" il retournera le résultat correspondant
Étrange ... c'est peut-être le cas. Essayez ceci dans votre instruction préparée et commentez le setString(): '" SELECT column1 FROM dbo.table1 WHERE column2 LIKE '% abc'; "' et voyez ce qui se passe. Peut-être qu'il veut juste le point-virgule à la fin. – DevilsHnd
@DevilsHnd, Eh bien, si je supprime le 'setString()' pour analyser la valeur, il va à l'encontre du but de prévenir les injections sql. avoir un point-virgule ne change rien – sasankad
Ceci est juste pour un test rapide. Cela entrerait dans la production comme ça. – jaxad0127