Java的MessageFormat – 我如何插入单引号之间的值?

我有使用java.text.MessageFormat对象的问题。

我试图创buildSQL插入语句。 问题是,当我做这样的事情:

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> )" 。 它保持原始的引号,但仍然没有插入值。

我该如何解决这个问题? 为了logging,我正在使用JDK 6u7。

我只是尝试双引号,它对我来说工作得很好:

 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 ) 

这是你需要的吗?

对不起,如果这不在身边,但它看起来像你试图复制已经在JDBC中的PreparedStatement。

如果你正试图创buildSQL来运行数据库,那么我build议你看一下PreparedStatement,它已经做了你正在做的事情(语法略有不同)。

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

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

来自: MessageFormat(Java平台SE 8)

使用三个单引号字符:

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

首先想到的是改变str1,str2,str3来引用他们的单引号。

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

然后,当然,从您的查询string中删除单引号。