Java MessageFormat-как я могу вставить значения между одинарными кавычками?


у меня возникли проблемы с использованием Java.текст.Объект MessageFormat.

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

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 54

5 ответов:

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

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 )

это то, что вам нужно?

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

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

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

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

от: MessageFormat (Java Platform SE 8)

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

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

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

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

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