我不確定我錯過了什麼,但我沒有關於如何在Where語句中使用or()
函數Query中的ORMlite。ORMlite QueryBuilder其中A和B和C和(D或E或F)
我有一個查詢,我希望它是:
where A and B and C and (D or E or F)
但代碼是什麼發生的是:
where (A and B and C and D) or E or F
不僅D
越來越附帶and
條款,但E
和F
未分組,意味着任何匹配E
的行將被retu但我需要A
,B
和C
作爲所有行的要求。
我已經看過ORMlite示例代碼和or()
函數的描述,但它們似乎都集中在(A and B) or (C and D)
場景,這不是我想要做的。我試圖弄清楚代碼應該如何適用於我的情況,但它確實是錯誤的,所以我不知道我在如何使用or()
函數時缺少什麼概念。
任何幫助?
protected void addWhereClauses(Where<Sheep, Integer> whereClause) throws SQLException {
whereClause
.eq("owner_id", this.owner.getId()) // A
.and()
.isNull("markedfordeletiondate") // B
.and()
.eq("isownedbyme", this.currentlyShowingSheepMine); // C
String filterstring = getFilterString();
if (filterstring != null) {
filterstring = "%"+filterstring+"%";
whereClause.and()
.or(
whereClause.like("name", filterstring), // D
whereClause.like("tag", filterstring), // E
whereClause.like("scrapietag", filterstring) // F
)
;
}
}
編輯:我知道生成的查詢是什麼樣子,因爲我抓住它,它登錄到控制檯:
String sql = queryBuilder.prepareStatementString();
Log.d("BFLF", "sql: "+sql);
你怎麼知道這是生成的?純粹基於結果? –
我正在查詢構建器吐出原始SQL,以便我可以看到它用於調試目的。我用我用來記錄sql語句的代碼更新了上面的帖子。 –
如果or()方法需要很多參數,我個人並不認爲你有什麼問題。嘗試在ormlite網站上發佈錯誤報告?如果這實際上是一個錯誤,是否可以切換到另一個ORM解決方案? –