0

我当前的查询如下,它适用于单个用户:

1
ao.find(da.class, Query.select().where("user=?",user)

现在,我想更改此查询以获取多用户数据,如下所示,但它不起作用并且给了我无效的列名。

1
ao.find(da.class, Query.select().where("user IN (?)",user)

此外,尝试通过应用单引号。即使是单个用户输入参数值也无法正常工作并给出相同的错误。

任何人都可以建议我出了什么问题并且必须在这里纠正吗?

错误为 ,

 Caused by: java.sql.SQLException: Column not found: user in statement [SELECT * FROM       PUBLIC.AO_0371A8_da WHERE "user" IN (?)]
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.DelegatingConnection.prep

或 when - where("used "('?')" 并为单个用户验证

at java.lang.Thread.run(Thread.java:662)
Caused by: java.sql.SQLException: Column not found: user in statement [SELECT * FROM      PUBLIC.AO_0371A8_da WHERE "user" IN ('?')]
at org.hsqldb.jdbc.Util.throwError(Unknown Source)
at org.hsqldb.jdbc.jdbcPreparedStatement.<init>(Unknown Source)
at org.hsqldb.jdbc.jdbcConnection.prepareStatement(Unknown Source)
at org.apache.tomcat.dbcp.dbcp.DelegatingConnection.prepareState

谢谢你

4

2 回答 2

1

如果要使用 IN 查询,则需要自己构建占位符列表。以下摘录自:https ://ecosystem.atlassian.net/browse/AO-263?focusedCommentId=69495&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-69495

MyEntity[] findEntities(Iterable<String> matchValues) {
    String placeholderCommaList = Joiner.on(", ").join(Iterables.transform(matchValues, Functions.constant("?")));
    Object[] matchValuesArray = Iterables.toArray(matchValues, Object.class);
    return ao.find(MyEntity.class, "primary_key_field_name", Query.select().where("match_field_name IN (" + placeholderCommaList + ")", matchValuesArray));
}

重要的是,占位符(“?”)的数量与参数的数量相匹配。

希望这可以帮助

于 2014-01-08T14:45:00.790 回答
0

有两个问题。

您不能使用 IN 子句中的一个参数从数据库中检索多行。此查询等效于第一个查询。两个用户需要 IN(?,?),三个用户需要 IN(?,?,?)。

第二个查询给出错误可能是因为列名是 USER。为您的变量和数据库列尝试不同的名称。

当您要求解决问题时,请务必报告错误。

如果您无法更改用户字段名称,您可以引用它。但我不知道 ORM 是否更改了 where 字符串。

ao.find(da.class, Query.select().where("\"USER\" IN (?)",user)
于 2013-05-16T08:01:02.767 回答