2015-04-01 2 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)"); 

и у меня есть массив строк, как это:

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

Теперь я хочу, чтобы искать в моем столе, и если все сырой пищи были в сырых именах, возвращающих имя 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

Трудно точно сказать, что здесь происходит. Можете ли вы подробно рассказать о том, что меняется, и о том, как это мешает функциям работать? –

+0

Является ли база данных SQL частью проблемы? Если нет, то, возможно, вы можете опубликовать компилируемый и автономный фрагмент кода, используя строковые литералы. – mins

ответ

0

Оказывается, что food_table содержит поля:

food_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 вы должны быть в состоянии получить имя пищи, независимо от того пункта.

+0

Большое вам спасибо !!! это сработало, спасибо всем :) – nadiya6050

Смежные вопросы