2015-04-01 75 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