Java MessageFormat - Как я могу вставить значения между одинарными кавычками? - PullRequest
60 голосов
/ 10 октября 2008

У меня проблема с использованием объекта java.text.MessageFormat.

Я пытаюсь создать операторы вставки SQL. Проблема в том, что когда я делаю что-то вроде этого:

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

Я получаю это значение result:

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

Как видите, проблема в том, что ни одно из целевых местоположений, заключенных в одинарные кавычки, не заменяется аргументами. Я пытался использовать двойные одинарные кавычки, как это: ''{1}'' и экранированные символы, как это: \'{1}\', но это все равно дает тот же результат

edit: я забыл упомянуть, что я также пытался '''{1}'''. Результат: "insert into <str0> values ( '{1}', '{2}', '{3}', <str4> )". Он сохраняет оригинальные кавычки, но все равно не вставляет значения.

Как я могу решить эту проблему? Для записи я использую JDK 6u7.

Ответы [ 5 ]

105 голосов
/ 10 октября 2008

Я только что попробовал двойные кавычки, и у меня все заработало:

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);

Результат:

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

Это то, что тебе нужно?

26 голосов
/ 10 октября 2008

Извините, если это не так, но похоже, что вы пытаетесь скопировать PreparedStatement, который уже находится в JDBC.

Если вы пытаетесь создать SQL для работы с базой данных, я предлагаю вам взглянуть на PreparedStatement, он уже делает то, что вы пытаетесь сделать (с немного другим синтаксисом).

Извините, если это не то, что вы делаете, я просто подумал, что укажу на это.

9 голосов
/ 10 октября 2008

Внутри String пара одинарных кавычек может использоваться для цитирования любых произвольных символов, кроме одинарных. Например, строка шаблона "'{0}'" представляет строку "{0}", а не FormatElement . Сама одиночная кавычка должна быть представлена ​​двойными одинарными кавычками '' на протяжении String. Например, строка шаблона "'{''}'" интерпретируется как последовательность '{ (начало цитирования и левая фигурная скобка), '' (одиночная кавычка) и }' (правая фигурная скобка и конец кавычки ), не '{' и '}' (указаны левая и правая фигурные скобки): представляет строку "{'}", не "{}".

От: MessageFormat (Java Platform SE 8)

2 голосов
/ 10 октября 2008

Используйте тройные одинарные кавычки:

MessageFormat messageFormat = "insert into {0} values ( '''{1}''', '''{2}''', '''{3}''', '''{4}''' )";
0 голосов
/ 10 октября 2008

Первое, что пришло в голову, это изменить str1, str2, str3, чтобы они заключались в одинарные кавычки.

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

Затем, конечно, удалите одинарные кавычки из строки запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...