我用彈簧的JdbcTemplate和運行像下面的查詢查詢列表
SELECT COLNAME FROM TABLEA GROUP BY COLNAME
有沒有命名的參數傳遞,但列名,COLNAME
,將被用戶傳遞。
問題
有沒有辦法有佔位符,就像
?
列名?例如SELECT ? FROM TABLEA GROUP BY ?
如果我想簡單地運行上述查詢並獲得
List<String>
什麼是最好的方法?
目前我正在做:
List <Map<String, Object>> data = getJdbcTemplate().queryForList(query);
for (Map m : data)
System.out.println(m.get("COLNAME"));
在使用任何用戶進入我的這是一個可怕的部分動態查詢動態查詢,我將推杆。 – birdy
@birdy:你可能想用一個簡單的正則表達式\\ w'來檢查字符串是否只有'單詞字符'。這將防止任何SQL注入的可能性。 –
你應該使用準備好的語句,而不是做這個正則表達式的東西。試試這個:getJdbcTemplate()。query(「SELECT?FROM TABLEA GROUP BY?」,new RowMapper(){ public String mapRow(ResultSet rs,int rowNum) throws SQLException返回rs。的getString(1); } },colName,colName);''' –
Jean