Java MessageFormat - 如何在单引号之间插入值?

时间:2008-10-10 02:15:17

标签: java

我在使用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}\'但它仍会提供相同的结果。

编辑:我忘了提到我也试过了'''{1}'''。结果是:"insert into <str0> values ( '{1}', '{2}', '{3}', <str4> )"。它保留了原始引号,但仍未插入值。

如何解决此问题?为了记录,我使用的是JDK 6u7。

5 个答案:

答案 0 :(得分:105)

我只是尝试过双引号,它对我来说很好用:

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 )

这是你需要的吗?

答案 1 :(得分:26)

很抱歉,如果这不在旁边,但看起来你正在尝试复制已经在JDBC中的PreparedStatement。

如果您正在尝试创建针对数据库运行的SQL,那么我建议您查看PreparedStatement,它已经完成了您尝试执行的操作(语法略有不同)。

对不起,如果这不是你在做什么,我只是想我会指出它。

答案 2 :(得分:9)

  

String 中,可以使用一对单引号来引用除单引号之外的任意字符。例如,模式字符串"'{0}'"表示字符串"{0}",而不是 FormatElement 。单引号本身必须在''中用双引号String表示。例如,模式字符串"'{''}'"被解释为'{(引用开始和左大括号),''(单引号)和}'的序列(一个右大括号和引用结束), '{''}'(引用左右花括号):表示字符串"{'}" "{}"

来自:MessageFormat (Java Platform SE 8 )

答案 3 :(得分:2)

使用三重单引号字符:

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

答案 4 :(得分:0)

首先想到的是改变str1,str2,str3以在它们周围加上单引号。

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

然后,当然,从查询字符串中删除单引号。