现象:对整数格式化会出现“,"符号
使用org.apache.ibatis.jdbc.SQL动态生成sql时候,为了灵活设置参数,使用了MessageFormat来格式化:
import org.apache.ibatis.jdbc.SQL;
import java.text.MessageFormat;
/**
* @author 认知科技技术团队
* 微信公众号:认知科技技术团队
*/
public class DemoConfig {
public static void main(String[] args) {
SQL sql = new SQL();
sql.SELECT("a,b,c");
sql.FROM("test_table");
sql.WHERE("a > {0} ");
String sqlStr = MessageFormat.format(sql.toString(), 100);
System.out.println(sqlStr);
}
}
1、当参数整数比较小时,测试数据为100,输出:
格式化后的整数100,为100。
2、当参数整数比较大是,测试数据为10000,输出:
此时10000,被格式化为10,000,显然不是我们预期的结果。
MessageFormat如何格式化整数
java.text.MessageFormat#format(java.lang.String, java.lang.Object...)
其实现,是根据参数类型转而用NumberFormat的实例DecimalFormat去格式化整数。
如何避免被DecimalFormat格式化,防止产生本博文不正确的sql参数
MessageFormat.format的所有参数转换为字符串类型,即显示格式化参数。
如:
MessageFormat.format(sql.toString(), ""+ 10000);
MessageFormat.format(sql.toString(), String.valueOf(10000));
MessageFormat.format(sql.toString(), Long.toString(10000));
等等;
小结
java.text.MessageFormat 对较大整数类型的格式化,会出现我们意想不到的格式问题,为了避免这种情况的出现,我们可以把参数都显示格式化为字符。