61 votes

Java MessageFormat - Comment puis-je insérer des valeurs entre guillemets simples?

Je vais avoir un problème à l'aide de java.texte.MessageFormat objet.

Je suis en train de créer des instructions SQL insert. Le problème c'est que quand je fais quelque chose comme ceci:

MessageFormat messageFormat = "insert into {0} values ( '{1}', '{2}', '{3}', {4} )";
Object[] args = { str0, str1, str2, str3, str4 };
String result = messageFormat.format(args);

Je reçois ce pour la valeur de result:

"insert into <str0> values ( {1}, {2}, {3}, <str4> )"

Comme vous pouvez le voir, le problème est que l'un des emplacements cibles qui sont entourées par des guillemets simples ne sont pas remplacés par des arguments. J'ai essayé d'utiliser les doubles guillemets simples comme ceci: ''{1}'' et les caractères échappés comme ceci: \'{1}\' , mais il donne toujours le même résultat.

edit: j'ai oublié de mentionner que j'ai aussi essayé d' '''{1}'''. Le résultat est: "insert into <str0> values ( '{1}', '{2}', '{3}', <str4> )". C'est en gardant l'original des guillemets autour de mais toujours pas d'insérer les valeurs.

Comment puis-je résoudre ce problème? Pour mémoire, je suis à l'aide du JDK 6u7.

107voto

serg Points 43893

J'ai juste essayé les guillemets doubles et cela a bien fonctionné pour moi:

 MessageFormat messageFormat = new MessageFormat("insert into {0} values ( ''{1}'', ''{2}'', ''{3}'', {4} )");
Object[] args = {"000", "111", "222","333","444","555"};
String result = messageFormat.format(args);
 

Le résultat est:

 insert into 000 values ( '111', '222', '333', 444 )
 

Est-ce ce dont vous avez besoin?

26voto

Aidos Points 1440

Désolé si cela ne concerne pas, mais il semblerait que vous essayiez de répliquer le PreparedStatement déjà présent dans JDBC.

Si vous essayez de créer du code SQL pour une base de données, je vous suggère de regarder PreparedStatement, il fait déjà ce que vous essayez de faire (avec une syntaxe légèrement différente).

Désolé si ce n'est pas ce que vous faites, j'ai juste pensé que je le signalerais.

10voto

2voto

Brian Duff Points 121

Utilisez des guillemets simples:

 MessageFormat messageFormat = "insert into {0} values ( '''{1}''', '''{2}''', '''{3}''', '''{4}''' )";
 

0voto

Bill James Points 7554

La première chose qui me vint à l’esprit fut de changer str1, str2, str3 pour que les guillemets simples les entourent.

Object [] args = {str0, "'" + str1 + "'", "'" + str2 + "'", "'" + str3 + "'", str4};

Ensuite, bien sûr, supprimez les guillemets simples de votre chaîne de requête.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X