java - 错误:带有参数的“$1”postgresql 查询处或附近的语法错误
问题描述
我有一个带有参数的 postgres 查询,在我的 Java 代码中,我使用 stringBuilder 来构建查询,然后 createNativeQuery 来创建查询并填充参数。但是,如果我在我的 gui 中运行查询,它会给我预期的结果,但在通过代码执行时会出错。我是 postgres 的新手,并且已经看到了一些与我需要在查询中转换参数几乎相同的问题,但是我的查询中有 IN 参数,即列表,我尝试了一些解决方案但没有没用。
我收到错误:-> “错误”:“异常 [EclipseLink-4002] (Eclipse Persistence Services - 2.5.1.v20130918-f2b9fc5):org.eclipse.persistence.exceptions.DatabaseException 内部异常:org.postgresql。 util.PSQLException:错误:“$1”位置或附近的语法错误:249
StringBuilder sb = new StringBuilder();
sb.append(" SELECT comments.comment, mapping.user_id,
mapping.comment_id, mapping.comment_state,
mapping.created_at FROM comments ").append(" comment
JOIN ").
append(" user_comment_mapping mapping ON
mapping.comment_id = comment.id WHERE
mapping.user_id IN ? AND mapping.comment_state = ?
");
final Query query = em.createNativeQuery(sb.toString());
query.setParameter("1", userIds);
query.setParameter("2",
2);
List<Object[]> list = query.getResultList();
谢谢!
解决方案
看来您正在参数持有者和名称之间混合。
如果你想使用持有人:
mapping.user_id IN ? AND mapping.comment_state = ?
然后
query.setParameter(1, userIds);
query.setParameter(2, 2);
如果你想使用名称:
mapping.user_id IN :ids AND mapping.comment_state = :stat
query.setParameter("ids", userIds);
query.setParameter("stat", 2);
推荐阅读
- lua - 忘记将 () 放入函数的名称中,但它没有给出错误,而是给了我一个新值。有什么解释吗?
- node.js - typescript/express 错误处理中间件
- xamarin.forms - 从 Xamarin Forms WebView 获取 HTML 文档
- javascript - 如何在 DApp-Frontend 中用 HTML 列出来自智能合约的一些数据
- c# - C# Hello world 失败
- python - 确定两个列表中的元素是否相同的有效方法
- python - Pd Groupby 不会对 pd 中的列进行分组
- java - 如何在 Eclipse 中激活 LFS 支持按钮?
- python - 将浮点列表转换为类似字节的对象会导致图像损坏
- python - 如何将二进制数的相应整数值打印到其位置?(在蟒蛇中)