【问题标题】:search an array in sqlite table在 sqlite 表中搜索数组
【发布时间】:2015-04-01 17:38:15
【问题描述】:

我有一张这样的桌子:

      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"));

但是当食物的原料被改变时,它就不起作用了。

请帮帮我。

【问题讨论】:

  • 很难准确说出这里发生了什么。您能否详细说明具体发生了什么变化,以及它如何阻止功能正常工作?
  • SQL 数据库是问题的一部分吗?如果不是,那么也许您可以使用字符串文字发布一段可编译且独立的代码。

标签: java android arrays sqlite


【解决方案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,您应该能够获取食物名称,无论项目顺序如何。

【讨论】:

    猜你喜欢
    • 2020-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2011-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多