2011-01-06 3 views
0

Possible en double:
creating comma seperated string to be given as input to sql “IN” clauseFournir des chaînes séparées par des virgules comme entrée sql "IN" clause

HI,

je dois mettre en œuvre plusieurs menu déroulant de sélection, et sélectionné Les valeurs doivent être formatées pour être entrées dans la clause "IN" de sql.

Am stocker les valeurs sélectionnées dans une chaîne.Mais il n'y a pas de délimiteur entre les valeurs, donc je ne peux pas diviser la chaîne.Est-il d'autres méthodes pour la mise en forme de la chaîne.

+0

Si vous stockez toutes les valeurs une chaîne sans délimiteur vous ne pouvez pas distinguer les valeurs! Considérons aussi qu'un blanc ('') est un délimiteur - donc vous pourriez en avoir un sans le savoir :-) - Peut-être poster un exemple de votre chaîne. – FrVaBe

+0

@K. Claszen - c'est vrai en général mais il y a des solutions pour des cas particuliers. Voir ma réponse ci-dessous. –

Répondre

1

solution Fun: Ajouter les valeurs à ArrayList ou LinkedList, l'appel toString(). Et remplacez '[' -> '(', remplacez ']' -> ')'.

+0

Ou puisque l'entrée est probablement un tableau, vous pouvez appeler directement Arrays.toString (yourArray), puis effectuer les mêmes remplacements. –

+0

Ou puisque l'entrée est probablement un tableau, il peut utiliser ce tableau pour assembler directement la chaîne SQL 'IN' clause String. –

0

Si vous possédiez une collection de chaînes et que vous les copiez ensuite dans une chaîne sans délimiteurs, vous ne pouvez plus les séparer. Ne fais pas ça. Si vous avez encore des problèmes, veuillez envoyer plus de détails sur votre tâche.

0

Si vous connaissez les valeurs de la liste déroulante et toutes valeurs sont uniques et non sous-ensembles de l'autre, vous pouvez utiliser String#contains() ou des expressions régulières pour tester, quelles valeurs ont été sélectionnées.

Mais il est de loin plus facile d'ajouter simplement un délimiteur trivial (comme le commun ";") tout en concaténant la chaîne qui contient la sélection.


Exemple de contient approche

String[] legalValues = {"YES","NO","MAYBE"}; 
String result = getSelection(); // returns a String like "MAYBEYES" 
StringBuilder inClauseBuilder = new StringBuilder(); 
boolean isFirst = true; 
for (String legalValue:legalValues) { 
    if (!result.contains(legalValue) 
    continue; 

    if (isFirst) { 
    isFirst = false; 
    } else { 
    inClauseBuilder.append(","); 
    } 
    inClauseBuilder.append("\"").append(legalValue).append("\""); 
} 
String inClause = inClauseBuilder.toString(); 

Remarque - cette approche échouera dès que vous avez des valeurs juridiques comme

String[] legalValues = {"YES","NO","MAYBE-YES", "MAYBE-NO"}; 
         ^^^ ^^   ^^^   ^^ 
Questions connexes