Подтвердить что ты не робот

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.

4b9b3361

Ответ 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 };

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