0
我有下面的代碼,我似乎無法弄清楚如何逃避我命名參數周圍的單引號。在生成的查詢,我需要在它的兩邊單引號:NamedParameterJdbcTemplate Oracle SQL如何在命名查詢中轉義單引號?
public List<Vehicle> findByApplicationId(String applicationId) {
// example application id is a string like 12345
MapSqlParameterSource sqlParameterSource = new MapSqlParameterSource();
sqlParameterSource.addValue("applicationId", applicationId);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("SELECT make, model");
stringBuilder.append(" FROM vehicle");
stringBuilder.append(" WHERE model IN (SELECT id FROM auto WHERE model_app IN (");
stringBuilder.append(":applicationId");
stringBuilder.append("))");
// in the resulting query the applicationId must appear
// as '12345', meaning with single quotes around it
return jdbcTemplate.query(stringBuilder.toString(), sqlParameterSource,
// lambda used as row mapper
(resultSet, rowNumber) -> {...
...
我試圖把周圍的名稱參數雙單引號爲stringBuilder.append("'':applicationId''");
,沒有工作。基於我在SO上看到的其他答案,我嘗試了單引號和許多其他單引號和雙引號的組合。似乎無法得到它。
如果將值綁定爲字符串,則不需要單引號。 –
@AlexPoole我嘗試過沒有引號。雖然通過調試日誌查看生成的查詢時,named參數可以解析,但我仍然無法獲取數據,而在SQL客戶端中,將完全相同的查詢放在pulls數據中。所以我認爲在查詢中沒有正確發送一些東西。你能通過一個小例子來表明你的意思嗎?我甚至試圖用不同的引用組合來製作命名參數和整數。有時它會解決,但引號數量錯誤,其他時間查詢被認爲是不好的SQL語法。 –
單引號不是答案。你會急於獲得字符串值'':applicationId'',它不會被視爲一個綁定變量,並且實際值12345不會被使用。您是否可能只是在SQL客戶端中插入要查找的數據並且沒有提交?只是一個想法。否則,什麼是列數據類型? –