2011-10-04 71 views
0

我有一個SQLite數據庫,我想要做的是用戶選擇一個過濾器。例如,我有一個書籍的數據庫,並且用戶只是希望從「Agata christies書籍」中查看數據。SQLite動態查詢

所以我做了一個微調選項來選擇,然後用意圖通過選擇的字段到另一個執行查詢選擇的活動。

我的問題是,我如何使動態查詢?認爲我有超過1個過濾器,我如何使WHERE子句取決於我通過意向從其他活動傳遞的數據?

感謝

回答

1

偷懶的辦法,但嘗試和真正的:如果你有又名通過微調的選項完全控制

String query = "Select id FROM books WHERE 1=1" 
if (condition1) query+= " AND name="+theName; 
if (condition2) query+= " AND author="+theAuthor; 
if (condition3) query+= " AND price="+thePrice; 

,這是安全的。如果它的edittext,使用preparedStatements並綁定參數以避免SQLI。

+0

我認爲條件1 = 1因此每次都是真實的,不起作用。 因爲我只是這樣做:'String query =「Select * FROM Incidentes WHERE 1 = 1」 遊標d = db2.rawQuery(查詢,null);'這並沒有給我所有的表 –

0
boolean filterName = false; 
boolean filterPrice = false; 
ArrayList<String> selectionArgs = new ArrayList<String>(); 
String query = "SELECT * FROM BOOKS WHERE 1=1"; 
if(filterName) { 
    selectionArgs.add(searchString); 
    query += " AND NAME = ?"; 
} 
if(filterPrice) { 
    selectionArgs.add(priceString); 
    query += " AND PRICE= ?"; 
} 

Cursor c = m_Database.rawQuery(query, (String[])selectionArgs1.toArray()); 
+0

但我需要一些地方。如果我把數據放在微調器的過濾器中,我必須把另一個地方。我想要阿加莎克里斯蒂,並且獎勵10個迪亞斯。 so'String [] selectionArgs = {prizeSelected,authorSelected +「%」}; Cursor c = db.rawQuery(「SELECT * FROM BOOKS WHERE NAME =?」,selectionArgs);' 如果我有2個條件,我該如何調用一些wheres子句?我甚至不知道你爲什麼使用「%」 –

+0

嗨,對不起。我更新了兩個參數的答案。如果您需要,您可以添加更多。 – Caner

+0

謝謝,但認爲也許我有時需要過濾器,有些時候不需要。 所以,也許我想過濾的價格,而不是作者,所以我的作者過濾器沒有填充。 我該如何管理?因爲價格=?它確定,但作者=?我不需要它在一些querys。謝謝 –

0

不知道這是做它的smartiest方式,但假設你事先知道你可以有1個整數濾波器(價格)和1個過濾器(作者姓名),我想嘗試:

選擇*從書架 其中 (價格< 0或與BOOKS.price =價格)和 (作者=「」或BOOKS.author =作者);

我不是SQLite專家,請檢查語法。訣竅是在這裏設置價格< 0如果沒有設置過濾器(因此條件價格< 0爲真,因此所有行都被考慮),並將作者設置爲空字符串以不過濾作者(SELECT不會過濾掉這些行,因爲條件是真的)。

這將工作!