Java MessageFormat - Как вставить значения между одинарными кавычками?
У меня возникла проблема с использованием объекта 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.
Ответы
Ответ 1
Я просто попробовал двойные кавычки, и это сработало отлично для меня:
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 )
Это то, что вам нужно?
Ответ 2
Извините, если это не так, но похоже, что вы пытаетесь реплицировать PreparedStatement, который уже находится в JDBC.
Если вы пытаетесь создать SQL для работы с базой данных, я предлагаю вам посмотреть PreparedStatement, он уже делает то, что вы пытаетесь сделать (с немного другим синтаксисом).
Извините, если это не то, что вы делаете, я просто подумал, что хочу указать на это.
Ответ 3
Внутри String пара одинарных кавычек может использоваться для цитирования любых произвольных символов, кроме одинарных кавычек. Например, строка шаблона "'{0}'"
представляет строку "{0}"
, а не FormatElement. Сама одиночная кавычка должна быть представлена двойными одинарными кавычками ''
всей String
. Например, строка шаблона "'{''}'"
интерпретируется как последовательность '{
(начало цитаты и левая фигурная скобка), ''
(одна цитата) и }'
(правая фигурная скобка и конец цитаты), а не '{'
и '}'
(цитированные левые и правые фигурные скобки): представляющая строку "{'}"
, а не "{}"
.
From: MessageFormat (платформа Java SE 8)
Ответ 4
Используйте тройные символы одиночной кавычки:
MessageFormat messageFormat = "insert into {0} values ( '''{1}''', '''{2}''', '''{3}''', '''{4}''' )";
Ответ 5
Первое, что приходило в голову, это изменить str1, str2, str3, чтобы иметь одинарные кавычки вокруг них.
Object[] args = { str0, "'" + str1 + "'", "'" + str2 + "'", "'" + str3 + "'", str4 };
Затем, конечно, удалите одинарные кавычки из строки запроса.