0

运行此代码时:

note = noteDAO.queryForFirst(
    noteDAO.queryBuilder().where().notIn("id",
        noteStateDAO.queryBuilder().distinct().selectColumns("noteId")
        .prepare())
    .prepare());

...我有以下例外:

Problems executing Android query: SELECT * FROM `notes` WHERE `id` NOT IN 
     (MappedStatement: SELECT DISTINCT `noteId` FROM `note_states`)

MappedStatement对那个 SQL中的内容有什么想法吗?

4

2 回答 2

1

你似乎已经解决了你的问题,但我想我会提供更多信息。

Where.notIn(...)方法采用对象或QueryBuilder参数。通过做 a prepare(),它把它变成了 a ,不幸 的是,MappedQuery它被作为 a 传递了。Object

正如您所提到的,如果您删除prepare(),它将使用QueryBuilder参数。请参阅.java 文档notIn(String, QueryBuilder)

我在ORMLite版本 4.43 中添加了更好的检查以防止传入准备好的查询。

于 2012-10-05T22:19:16.713 回答
0

好的,自己找的。无需prepare内部子选择查询:

note = noteDAO.queryForFirst(
    noteDAO.queryBuilder().where().notIn("id",
        noteStateDAO.queryBuilder().distinct().selectColumns("noteId")
        /*.prepare()*/)
    .prepare());
于 2012-10-05T22:07:14.583 回答