[android]sqlite 表中搜索数组

标签: sqlite Java Android
发布时间: 2017/3/19 14:49:41
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有这样一个表︰

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

还有这样一个字符串数组︰

    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:

看来, 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 你应该能够获得食物名称的项目顺序。

赞助商