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中删除单引号。