[英]How to handle 'IN' case in SQL Statement with the way of Parameterized Query?
為了避免在我的項目中出現SQL注入攻擊,我嘗試使用Parameterized Query方式訪問數據庫。 現在,我知道如何處理以下相同的情況(使用Spring JdbcTemplate):
String sql = "SELECT * FROM T_USER WHERE USERNAME = ? AND PASSWORD = ?"
jdbcTemplate.query(sql,
new UserRowMapper(),
new Object[]{"%admin%", "%password%"});
上面的代碼沒有問題,但是我不知道如何處理“ IN”情況,以下是我的情況,並且工作失敗:
String sql =
"SELECT * FROM T_USER WHERE USERNAME = ? AND PASSWORD = ? AND CLASS_ID IN (?)"
jdbcTemplate.query(sql,
new UserRowMapper(),
new Object[]{"%admin%", "%password%", "1,2,3"});
有人給我指導嗎? 非常感謝。
我認為您可以創建一個List並將其作為第三個參數傳遞。 另外,您需要在前兩列過濾器中使用LIKE
代替=
。
List<Integer> classIds = new ArrayList<Integer>();
classIds.add(1);
classIds.add(2);
classIds.add(3);
String sql = "SELECT * FROM T_USER WHERE "+
"USERNAME LIKE ? AND PASSWORD LIKE ? AND CLASS_ID IN (?)";
jdbcTemplate.query(sql, new Object[]{"%admin%", "%password%", classIds},
new UserRowMapper());
請注意:這是語法:
public List query(String sql, Object[] args, RowMapper rowMapper)
throws DataAccessException
編輯:請嘗試將namedParameterJdbcTemplate
作為bwlow:
String sql = "SELECT * FROM T_USER WHERE "+
"USERNAME LIKE :uname AND PASSWORD LIKE :passwd AND CLASS_ID IN (:ids)";
Map<String, Object> namedParameters = new HashMap<String, Object>();
namedParameters.put("uname", "%admin%);
namedParameters.put("passwd", "%password%");
namedParameters.put("ids", classIds);
List result = namedParameterJdbcTemplate.query(sql, namedParameters,
new UserRowMapper());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.