0

ColumnArg是 OrmLite 的一个很好的补充,它允许在使用QueryBuilder.

我有以下用例,它与 OrmLite 站点上给出的示例几乎相同(返回所有Foos where alpha <> beta(数据库alphabeta的某些列):

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不正确?

4

1 回答 1

0

选择 * 从foos哪里alpha<> 'com.j256.ormlite.stmt.ColumnArg@419fb770'

哇。哇。这只是 ORMLite 中的一个错误。在看代码时,我很尴尬。我应该看到当我添加ColumnArg功能时会发生这种情况。

我已经检查了一个可以通过 git 获得的主干修复:

https://github.com/j256/ormlite-core/commit/60676a74cebf4704f2eee0d1ec05207a83a706d1

它将在 ORMLite 的 4.46 版本中。

于 2013-07-19T19:32:30.647 回答