构建SQL语句时出错

时间:2012-10-05 21:49:22

标签: ormlite query-builder

运行此代码时:

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`)

关于SQL中MappedStatement的什么想法?

2 个答案:

答案 0 :(得分:1)

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

Where.notIn(...)方法接受对象或QueryBuilder参数。通过执行prepare(),它会将其转换为MappedQuery,但遗憾的是,它已作为Object传递。

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

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

答案 1 :(得分:0)

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

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