在sqlite表中搜索数组

时间:2015-04-01 17:38:16

标签: java android arrays 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"));

但是当食物原料发生变化时,它就无法发挥作用。

请帮帮我。

1 个答案:

答案 0 :(得分:0)

food_table似乎包含字段:

food_id:分配给食品项目的唯一ID food_name:食品名称
food_raw:由,

分隔的成分

现在,由于成分可能与相同,但其顺序与数据库中存储的不同,简单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,您应该能够获得食物名称,无论项目顺序如何。