我正在使用MessageFormat.format()为我的PreparedStatement创建字符串。我读到使用StringBuilder可能是SQL注入的原因。 MessageFormat是否相同?
代码像这样
String SQL
= "select CT.SYS_CHANGE_OPERATION, CT.{0} as ID, t.*\n"
+ "from changetable (changes {1}, ?) as CT \n"
+ "left outer join {2} as t \n"
+ "on t.{3} = CT.{4} \n"
+ "order by CT.SYS_CHANGE_VERSION";
String finalSQL = MessageFormat.format(SQL, primaryKey, table, table, primaryKey, primaryKey);
PreparedStatement pstmt = con.prepareStatement(finalSQL);
这不安全。 MessageFormat.format
只是将给定字符串中{x}的出现替换为给定对象,而没有转义后者。