运行此代码时:
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
的什么想法?
答案 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());