2015-11-09 4 views
-1

Извините за мой английский. Я пытаюсь создать динамически. Пример: мы вводим. Слово «hellow», я ввожу h -> он - это все слово, имя которого начинается во втором he -> он - это все слово, имя которого начинается в последнем hel -> он есть ... и так далее. Слово может быть в верхнем и нижнем регистре, таком как HeLLow. Мой примерПоиск sqlite android

public List<Map<String, String>> getSearch(String tableName, String search) { 
     String query = "SELECT * FROM " + tableName + " WHERE `name` LIKE " + search; 

     Cursor cursor = db.rawQuery(query, null); 
     List<Map<String, String>> list = new ArrayList<>(); 
     String[] names = cursor.getColumnNames(); 

     if(cursor.moveToFirst()) { 
      do{ 
       Map<String, String> map = new HashMap<String, String>(); 
       for (int i = 0; i < names.length; i++) { 
        map.put(names[i], cursor.getString(i)); 
       } 
       list.add(map); 

      } while (cursor.moveToNext()); 
     } 

     return list; 
    } 

Я стараюсь сделать так:

String query = "SELECT * FROM " + tableName + " WHERE name = " + search;

String query = "SELECT * FROM " + tableName + " WHERE name MATCH " + search;

его не работать тоже, я всегда list = 0

+0

так что это не имеет ничего общего с андроидом или sqlite, но может быть перефразировано как 'как LIKE работает в SQL' – njzk2

+0

Почему у меня есть -1? – g8214435

ответ

1

Когда вы строите слово на букву по буквам, добавьте его с обозначением подстановки, то есть %, например, «he%», следующая буква «hel%»

Создайте переменную search, для каждой итерации письма, добавленной или удаленной, добавьте ее с помощью шаблона каждый раз, например «Hel%», затем объедините SQL, как этот

String query = "SELECT * FROM " + tableName + " WHERE name LIKE " + search;

по ключевому слову является SQL слово LIKE, который поможет вам хит на строки обнаружили, что содержит слово, как Хель%.

+0

спасибо за ответ, если я ввожу 'ow' его найти свое слово (' hellow')? – g8214435

+0

Я создаю как этот 'String query =" SELECT * FROM "+ tableName +" WHERE name LIKE "+" '"+ search +"%' ";' его работа хорошая. Но если у меня есть слово, подобное этому «hellow-world», и я ввожу «мир», он не найдет моего слова ( – g8214435

+1

Простой, даже используйте подстановочный знак перед словом ... – t0mm13b

1

В качестве альтернативы рассмотрите возможность расширения FTS (полнотекстового поиска) для SQLite. Запрос с FTS работает невероятно быстро, обеспечивает результаты независимо от верхнего или нижнего регистра и поставляется с SQLite для Android SDK.

Вы можете найти рабочий пример ниже: https://github.com/dawidgdanski/Bakery

Надеется, что это помогает как-то.

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