[英]How to compose a Clojure Query with embedded double quotes
我想lnam
一個Clojure查詢,以便where子句中的lnam
和fnam
參數是雙引號。 我需要它們雙引號,因為嵌入的名稱包含單引號字符,如“O'BRIEN”。
我一直在查看Clojure查詢和在字符串中嵌入雙引號的示例,但我沒有找到我想要的示例。
這在lein repl
運行良好
gic-cmp.core=> (def lnam "O'BRIEN")
#'gic-cmp.core/lnam
gic-cmp.core=> (str """"lnam"""")
"O'BRIEN"
但是這不會在下面的查詢中產生帶引號的字符串。
(defn match-this-rec-with-last
""
[gic-id lnam fnam search-date]
(let [query (str (str "select g.* from gic_employees g where g.processed_date = '" search-date "' ")
(str "and g.gic_id = '" gic-id "' and g.last_name = ")
""""lnam""""
(str " and g.first_name = ")
(str """"fnam"""")
(str " order by g.processed_date desc "))]
(println query)
(j/query db
[query])))
使用 ? 對於查詢參數,jdbc將正確地轉義它們:
(defn match-this-rec-with-last
""
[gic-id lnam fnam search-date]
(let [query [(clojure.string/join " " ["select g.* from gic_employees g where g.processed_date = ?"
"AND g.gic_id = ? and g.last_name = ?"
"AND g.first_name = ?"
"ORDER BY g.processed_date desc"])
;; values
search-date gic-id lnam fnam]]
(println query)
(j/query db
query)))
REPL顯示str函數的返回值,並帶有引號。
(str """"lnam"""")
這將返回2個空字符串,lnam和另外2個空字符串,所有字符串都帶有引號。
底層字符串是java.lang.String,在字符串中包含雙引號的標准java方法是使用反斜杠轉義它。
user=> (str "test with \"quoted\" value")
"test with \"quoted\" value"
user=> (println (str "test with \"quoted\" value"))
test with "quoted" value
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.