2
(sql/with-connection {... mydatabase }
    (sql/with-query-results rows [ "select * from users where email in (?)" 
       [ "bob@site.com" "mary@other.com" ] ] 
       (doseq [rows row] 
            (prn row))))

これは常に結果を返しません。「?」だけを使ってみました。代わりに "(?)"

4

2 に答える 2

2

AFAIR、これを直接行うことはできません。バックグラウンドマクロwith-query-resultsは java.sql.PreparedStatement を使用し、各パラメータに対して .setObject を呼び出します。だからあなたはこのようなことを書く必要があります

(sql/with-connection db
  (sql/with-query-results rs
    [(str "select * from users where email in ("
          (apply
           str
           (interpose ", " (map #(str "\"" % "\"")
                                ["bob@site.com" "mary@other.com"]))) ")")]
    ...))

「in」パラメーターを使用して、既に準備された SQL 文字列を生成するには: "select * from users where email in (\"bob@site.com\", \"mary@other.com\")".

より良い方法は、sqlkorma のような clojure sql ライブラリの 1 つを使用することです。

于 2012-12-18T07:17:51.007 に答える