2015-04-01 72 views
1

我有一個表是這樣的:搜索在SQLite表數組

 database.execSQL("CREATE TABLE IF NOT EXISTS food_table (food_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL , food_name CHAR, food_raw CHAR)"); 

和我有一個String數組,像這樣:

public static ArrayList<String> rawsNames = new ArrayList<String>(); 

現在我想在我的表,如果全​​部搜索食物原料在rawsNames返回food_name。

我這樣做:

String raws = AdapterNotes.rawsNames.toString().replace("]", "").replace("[", ""); 
Cursor cursor = G.database.rawQuery("select * from food_table WHERE food_raw LIKE '%" + raws + "%' ", null); 
    while (cursor.moveToNext()) { 
     String name = cursor.getString(cursor.getColumnIndex("food_name")); 

但是當食物的原料發生變化,也不起作用。

請幫幫我。

+0

很難確切地說出這裏發生了什麼。你能否詳細說明正在發生什麼變化,以及它如何阻止功能運行? – 2015-04-01 17:45:24

+0

SQL數據庫是問題的一部分嗎?如果不是,那麼也許你可以使用字符串文字發佈一段可編譯和獨立的代碼。 – mins 2015-04-01 17:52:45

回答

0

看來,food_table包含字段:

food_id:該食品的名稱
food_raw:主料由,

分離現在,由於分配到食品
food_name唯一的ID有可能的成分是相同的,但其順序是不同從存儲在數據庫,一個簡單的WHERE LIKE %"a, b, c"%將不會工作,因爲b, a, c也是同一食物的有效成分(只是順序是不同的)。

因此,你需要在每個個人成分,而不是匹配的所有成分作爲一個整體:

String req = ""; 
for(String rawName : rawNames) 
    req += " food_raw LIKE %"+rawName+"% AND"; 
if(req.length() > 4) 
    req = req.substring(0, req.length()-4); // to remove last " AND" 
String query = "SELECT * FROM food_table WHERE "+req; 

使用query你應該能夠獲得食物的名稱,無論項目訂單。

+0

非常感謝你!它的工作,謝謝所有:) – nadiya6050 2015-04-01 20:48:46