【问题标题】:JBDI - Eating up part of the SQL statementJBDI - 吃掉部分 SQL 语句
【发布时间】:2021-12-08 23:47:09
【问题描述】:

这是我的 JDBI 方法

@Override
@SqlQuery("SELECT * FROM " + TABLE_NAME + " WHERE " + COLUMN_CAMPAIGN_ID + " = :campaignId AND " + COLUMN_STATUS
                + " = 0 AND " + COLUMN_STAGE_ID + " IS NULL AND " + COLUMN_MODIFICATION_DATE
                + " < NOW() - INTERVAL '<timeInterval>'")
List<Idea> getDraftIdeasBeforeTime(@Bind("campaignId") long campaignId,
                @Define("timeInterval") String timeInterval);

在执行时,它会因以下错误而中断

ERROR [2021-10-22 10:06:00,041] com.addons.advanced.jobs.DraftIdeasJob: Exception received while trying to delete draft ideas : org.skife.jdbi.v2.exceptions.UnableToExecuteStatementException: org.postgresql.util.PSQLException: ERROR: argument of AND must be type boolean, not type timestamp without time zone
  Position: 127 [statement:"SELECT * FROM ideas WHERE campaign_id = :campaignId AND status = 0 AND stage_id IS NULL AND modification_date < NOW() - INTERVAL '<timeInterval>'", located:"SELECT * FROM ideas WHERE campaign_id = :campaignId AND status = 0 AND stage_id IS NULL AND modification_date ", rewritten:"/* IdeasDaoJdbi.getDraftIdeasBeforeTime */ SELECT * FROM ideas WHERE campaign_id = ? AND status = 0 AND stage_id IS NULL AND modification_date ", arguments:{ positional:{}, named:{campaignId:10}, finder:[]}]

如您所见,发布位置,它只考虑直到... AND modification_date 并忽略之后的内容。

为什么会这样?

【问题讨论】:

    标签: java postgresql jdbc dropwizard jdbi


    【解决方案1】:

    您需要在查询中转义&lt;(更改为\\&lt;)符号,因为它与模板引擎使用的相同。

    编辑: 添加到更具体的答案,问题在于

    " &lt; NOW() - INTERVAL '&lt;timeInterval&gt;'"

    需要的

    " \\&lt; NOW() - INTERVAL '&lt;timeInterval&gt;'"

    【讨论】:

      猜你喜欢
      • 2010-09-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多