我在使用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);
Run Code Online (Sandbox Code Playgroud)
我得到这个值为result
:
"insert into <str0> values ( {1}, {2}, {3}, <str4> )"
Run Code Online (Sandbox Code Playgroud)
如您所见,问题是由单引号括起的任何目标位置都不会被参数替换.我尝试使用像这样的双引号:''{1}''
和像这样的转义字符:\'{1}\'
但它仍然给出相同的结果.
编辑:我忘了提到我也试过了'''{1}'''
.结果是:"insert into <str0> values ( '{1}', '{2}', '{3}', <str4> )"
.它保留了原始引号,但仍未插入值.
我该如何解决这个问题?为了记录,我使用的是JDK 6u7.
ser*_*erg 107
我刚试过双引号,它对我来说很好用:
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);
Run Code Online (Sandbox Code Playgroud)
结果是:
insert into 000 values ( '111', '222', '333', 444 )
Run Code Online (Sandbox Code Playgroud)
这是你需要的吗?
Aid*_*dos 26
很抱歉,如果这不在旁边,但看起来您正在尝试复制已在JDBC中的PreparedStatement.
如果您正在尝试创建针对数据库运行的SQL,那么我建议您查看PreparedStatement,它已经完成了您尝试执行的操作(语法略有不同).
对不起,如果这不是你在做什么,我只是想我会指出它.
Chr*_*ran 10
在String中,一对单引号可用于引用除单引号之外的任何任意字符.例如,模式字符串
"'{0}'"
表示字符串"{0}"
,而不是FormatElement.单引号本身必须用''
整个a中加倍的单引号表示String
.例如,模式字符串"'{''}'"
被解释为序列'{
(引用的开始和左大括号),''
(单引号),和}'
(右大括号和报价的端部)不'{'
与'}'
(援引左和右大括号) :代表字符串"{'}"
,而不是"{}"
.