ColumnArg
是 OrmLite 的一个很好的补充,它允许在使用QueryBuilder
.
我有以下用例,它与 OrmLite 站点上给出的示例几乎相同(返回所有Foo
s where alpha <> beta
(数据库alpha
中beta
的某些列):
Dao<Foo, Integer> fooDao = databaseHelper.getDao(Foo.class);
QueryBuilder<Foo, Integer> fooQB = fooDao.queryBuilder();
fooQB.where().ne("alpha", new ColumnArg("beta")); // where alpha <> beta
List<Foo> result = fooQB.query();
我发现的问题是,无论 alpha 和 beta 列是否不相等,此查询始终会返回它们。
在仔细检查 SQLite 数据库内容并从命令行直接对数据库运行查询后,我决定最好检查一下实际生成的语句QueryBuilder
:
Log.d("Foo", "Query: " + fooQB.prepareStatementString());
然后,基础查询公开为:
SELECT * FROM `foos` WHERE `alpha` <> 'com.j256.ormlite.stmt.ColumnArg@419fb770'
这里似乎发生的事情是 OrmLite 没有将第二个参数读取ne()
为 a ColumnArg
,而是获取 the 的toString()
表示ColumnArg
并将其视为列值(字符串)。
正确的查询显然应该是:
SELECT * FROM `foos` WHERE `alpha` <> `beta`
这是 OrmLite 中的错误还是我使用ColumnArg
不正确?