2016-04-03 64 views
-3

我試圖設計一個功能,用戶可以指定他們從查詢中得到的數據。以下是最終用戶的搜索選項。我可以在SQLite查詢中指定一個列有任何值嗎?

  • 球員合同(非空contractId)
  • 球員沒有合同(空contractId)
  • 所有玩家(空或非空contractId)

我想創建一個函數,該函數可以接受一個字符串並將其插入查詢以返回所需的數據集。

public ArrayList<Player> getPlayers(String contractFilter) { 
    String query = "... WHERE player.ContractId is " + contractFilter; 
} 

採用這種設計,我可以在contractFilter = "null"contractFilter = "not null"通過。 有什麼我可以通過第三條件(空或非空)?像contractFilter = "any"

+1

我認爲'不爲null'表示'任何' –

+0

@MD通過「任何」,我的意思是我想要返回'null'或'not null'。我已經更新了我的問題以澄清這一點。 – NSouth

+4

不要在WHERE子句中包含該列。只包含專門用於限制結果的列。 – CommonsWare

回答

2

恕我直言,最好的解決辦法是不要在你的WHERE條款中包含該列。如果使用like SQLiteQueryBuilder,則在條件爲「任何」時跳過appendWhere()調用。

你可以嘗試破解解決此問題:

  • 使用column_name IS NULL OR column_name IS NOT NULL
  • 使用column_name LIKE '%'

然而,有一個像樣的機會,這些都會表現更差。理想情況下,SQLite的查詢規劃器將檢測「任何」情況並優化它,但我不會認爲是這種情況。

相關問題