- 基于mybatis的预编译
“$”无法防止sql注入,”#”可以防止,因为“#“使用了预编译机制,而”$”未使用。
当出现表名之类的,需要预编译的参数时,则需要使用“$“,此时应注意表名不得从页面(客户端)传入,最好在java代码中自行获取。
当出现“in“关键词的时候,配合”#”使用应记得参数此时为多个,而非一个。
2.直接基于PreparedStatement的预编译
A: if (elements[k][1].equalsIgnoreCase(DataType.Float)) {
stmt.setFloat(k + 1, Float.parseFloat(elements[k][0]));
}
B:String m_Device7300ASAM_SQL = "select * from tab_multipolar_shelf where device_id=?";
String[][] elements ={{device_id,"STRING"}};
return (Map)JdbcUtils.query(m_DeviceInfo_SQL_Prepared,elements)
代替
String m_Device7300ASAM_SQL = "select * from tab_multipolar_shelf where device_id='";
return DataSetBean.getRecord(this.m_Device7300ASAM_SQL + device_id + "'");