gpt4 book ai didi

java - 使用 4.48 版构建 ORMLite 查询时出现问题

转载 作者:行者123 更新时间:2023-11-29 03:26:11 25 4
gpt4 key购买 nike

我在将 ormlite for android 从 4.47 版升级到 4.48 版时遇到问题

在 4.47 中一切正常,但在 4.48 启动应用程序中我有这个异常:

java.lang.RuntimeException: Unable to resume activity:
java.lang.IllegalStateException: The SQL statement has not been finished
since there are previous operations still waiting for clauses.

问题出在这行代码中:

final PreparedQuery<Intervento> preparedQuery = queryBuilder.prepare();

这是我的方法的源代码:

final Where<Intervento, Integer> where = queryBuilder.where();
where.eq(Intervento.ESEGUITO_FIELD_NAME, false).and();
where.eq(Intervento.ENABLED_FIELD_NAME, true).and();
if (whereFields!=null){
for (String key : whereFields.keySet()){
if (whereFields.get(key)!=null){
SelectArg selectArg = new SelectArg();
selectArg.setValue(whereFields.get(key).getClass().cast(whereFields.get(key)));
where.like(key,selectArg).and();
}
}
}

final PreparedQuery<Intervento> preparedQuery = queryBuilder.prepare();
final AndroidCompiledStatement compiledStatement = (AndroidCompiledStatement)preparedQuery.compile(DatabaseHelper.getInstance(mContext).getConnectionSource().getReadOnlyConnection(),StatementType.SELECT);
return compiledStatement.getCursor();

编辑:

我想可能是因为最后一个.and()加入了for cycle...但是在这个最新的版本升级中已经失效了。

最佳答案

I think it is possibly due to the last .and() added in for cycle... But it has stop working in this latest version upgrade.

我不是 100% 确定为什么它在 4.47 下工作,但 4.48 在 .and() 链接部门添加了一些功能,所以也许现在它是更好地检查此错误。现在你有悬空的 .and() 语句。

与其将 .and() 放在行的末尾,不如将它们移到行的开头。现在,如果 whereFieldsnull,那么您将使用以下内容构建查询:

where.eq(Intervento.ESEGUITO_FIELD_NAME, false).and();
where.eq(Intervento.ENABLED_FIELD_NAME, true).and();

如果ORMLite实际上生成的 SQL 类似于:

WHERE eseguito = false AND enabled = true AND

请注意查询末尾悬空的 AND,这是无效的。如果在添加另一个 SQL 子句之前放置 .and() when,那么这将不是问题。

where.eq(Intervento.ESEGUITO_FIELD_NAME, false); // no .and() here
// .and() at the start of a new clause
where.and().eq(Intervento.ENABLED_FIELD_NAME, true);

然后在 whereFields != null 和循环中,您将执行如下操作:

where.and().like(key,selectArg);

因此,每次有另一个键时,您都会添加 AND 键,如 ?

关于java - 使用 4.48 版构建 ORMLite 查询时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20877152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com