我有一個SQLite數據庫,我想要做的是用戶選擇一個過濾器。例如,我有一個書籍的數據庫,並且用戶只是希望從「Agata christies書籍」中查看數據。SQLite動態查詢
所以我做了一個微調選項來選擇,然後用意圖通過選擇的字段到另一個執行查詢選擇的活動。
我的問題是,我如何使動態查詢?認爲我有超過1個過濾器,我如何使WHERE子句取決於我通過意向從其他活動傳遞的數據?
感謝
我有一個SQLite數據庫,我想要做的是用戶選擇一個過濾器。例如,我有一個書籍的數據庫,並且用戶只是希望從「Agata christies書籍」中查看數據。SQLite動態查詢
所以我做了一個微調選項來選擇,然後用意圖通過選擇的字段到另一個執行查詢選擇的活動。
我的問題是,我如何使動態查詢?認爲我有超過1個過濾器,我如何使WHERE子句取決於我通過意向從其他活動傳遞的數據?
感謝
偷懶的辦法,但嘗試和真正的:如果你有又名通過微調的選項完全控制
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。
public Cursor rawQuery (String sql, String[] selectionArgs)
生成SQL字符串與?
的約束力和selectionArgs兩個參數添加。
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());
但我需要一些地方。如果我把數據放在微調器的過濾器中,我必須把另一個地方。我想要阿加莎克里斯蒂,並且獎勵10個迪亞斯。 so'String [] selectionArgs = {prizeSelected,authorSelected +「%」}; Cursor c = db.rawQuery(「SELECT * FROM BOOKS WHERE NAME =?」,selectionArgs);' 如果我有2個條件,我該如何調用一些wheres子句?我甚至不知道你爲什麼使用「%」 –
嗨,對不起。我更新了兩個參數的答案。如果您需要,您可以添加更多。 – Caner
謝謝,但認爲也許我有時需要過濾器,有些時候不需要。 所以,也許我想過濾的價格,而不是作者,所以我的作者過濾器沒有填充。 我該如何管理?因爲價格=?它確定,但作者=?我不需要它在一些querys。謝謝 –
不知道這是做它的smartiest方式,但假設你事先知道你可以有1個整數濾波器(價格)和1個過濾器(作者姓名),我想嘗試:
選擇*從書架 其中 (價格< 0或與BOOKS.price =價格)和 (作者=「」或BOOKS.author =作者);
我不是SQLite專家,請檢查語法。訣竅是在這裏設置價格< 0如果沒有設置過濾器(因此條件價格< 0爲真,因此所有行都被考慮),並將作者設置爲空字符串以不過濾作者(SELECT不會過濾掉這些行,因爲條件是真的)。
這將工作!
我認爲條件1 = 1因此每次都是真實的,不起作用。 因爲我只是這樣做:'String query =「Select * FROM Incidentes WHERE 1 = 1」 遊標d = db2.rawQuery(查詢,null);'這並沒有給我所有的表 –