我通过Clojure使用JDBC,并希望在我的postgres字段中搜索它们是否包含问号,但无论我如何尝试逃避或加倍,它似乎都无法运行我的问号。
(jdbc/query *db* "SELECT * FROM conversations WHERE full_text @@ to_tsquery('?')")
= > ()
答案 0 :(得分:1)
查询文档似乎说参数应该是一个向量(就像在Alan的执行样本中一样)。这只是一个复制/粘贴错误吗?
那就是说 - 你确定你正在寻找正确的位置吗?对我而言,to_tsquery('?')
似乎是问题所在。什么都不返回。
select to_tsquery('?');
NOTICE: text-search query contains only stop words or doesn't contain lexemes, ignored
Successfully run. Total query runtime: 73 msec.
1 rows affected.
这似乎不是Clojure或JDBC问题,这只是postgresql。您能更详细地描述您的架构以及要存档的内容吗?
答案 1 :(得分:1)
诀窍是相当明显的:只需使用准备好的声明吗?指向包含您搜索到的值的值。
(require '[honeysql.core :as sql]
(defn dbr [s] (jdbc/query *db* s))
(-> {:select [:*] :from [:conversations] :where [:like :full_text "%?%"]} sql/format dbr)
答案 2 :(得分:0)
您可能会有更多运气using the jdbc/execute!
function,因为它基本上是传递给数据库的原始SQL字符串:
(j/execute! db-spec
["update fruit set cost = ( 2 * grade ) where grade > ?" 50.0] )
我会放弃参数(至少开始),更像是:
(j/execute! db-spec
["update fruit set cost = ( 2 * grade ) where grade > 50.0" ])
除了您的情况,?
可能被解释为param的占位符。也许需要逃避。