使用JDBC,如何在postgres文本中搜索问号?

时间:2018-03-22 02:31:07

标签: postgresql jdbc clojure escaping

我通过Clojure使用JDBC,并希望在我的postgres字段中搜索它们是否包含问号,但无论我如何尝试逃避或加倍,它似乎都无法运行我的问号。

    (jdbc/query *db* "SELECT * FROM conversations WHERE full_text @@ to_tsquery('?')")
= > ()

3 个答案:

答案 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的占位符。也许需要逃避。