2011-08-26 4 views
0

Je travaille sur une application Java qui utilise PreparedStatement.validation de paramètre dans PreparedStatement

SELECT FIELD1, FIELD2 FROM MYTABLE WHERE (FIELD1='firstFieldValue' OR FIELD1='' or 'firstFieldValue'=''); 

firstFieldValue est un paramètre. Et il est nécessaire de vérifier que sa valeur est vide dans SQL.

J'ai créé une requête préparée avec SQL paramétrée suivante:

SELECT FIELD1, FIELD2 FROM MYTABLE WHERE (FIELD1=? OR FIELD1='' or ?=''); 

et je définir des valeurs comme suit:

preparedStatementInstance.setString(1, this.firstFieldValue); 
preparedStatementInstance.setString(2, this.firstFieldValue); 

De cette façon, ne fonctionne pas. L'exécution échoue. Je pense que l'instruction SQL préparée est erronée.

Comment puis-je corriger le SQL pour l'instruction préparée pour ce cas?

+0

Pourriez-vous essayer de mettre le "?" sur le côté droit? – Jacob

+0

bon point, je vais vérifier maintenant, merci –

+0

Cette façon ne fonctionne pas, mais merci. –

Répondre

1

Vérifiez simplement dans java.

if firstFieldValue.equals("") 

then SELECT FIELD1, FIELD2 FROM MYTABLE 

else 

SELECT FIELD1, FIELD2 FROM MYTABLE WHERE (FIELD1=? OR FIELD1=''); 

preparedStatementInstance.setString(1, this.firstFieldValue); 
+0

'Et il est nécessaire de vérifier que sa valeur est vide dans SQL.» La meilleure question serait pourquoi il est nécessaire de vérifier en SQL. – Jacob

+0

Le SQL réel est plus complexe que je l'ai spécifié. Je me demande simplement s'il est possible d'utiliser le paramètre passé de cette façon: '? = ''' –

+1

Eh bien. De cas courant, il est rare de le faire en SQL. Y a-t-il un avantage à le faire en SQL? –

0

il n'y a pas « je pense qu'il est faux » dans l'exécution des années sql, soit il est correct et il exécute la requête ou SQL est faux et vous obtenez un SQLException

Si elle échoue, vous devez fournir le forum avec la stacktrace, donc nous ne devons pas lister.

Que voulez-vous dire par «vide»? vide comme une chaîne vide ou comme nulle dans le db

+0

Chaîne vide. Je voulais juste vérifier le paramètre qu'il est vide. –

Questions connexes