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