如何在sqlite中实现Cyrillic不敏感搜索

时间:2014-11-11 11:22:57

标签: android sqlite search

我有一个LIKE查询来搜索sqlite数据。我在我的数据库类中使用这样的LIKE查询:

String SearchResult = "SELECT * FROM city AS t1, region AS t2 ON t1.region_number = t2._id WHERE t1.name LIKE '%' || ? || '%';";

如何使搜索西里尔字母不敏感?

以下是我正在使用它的代码的一部分。这是一个城市目录,我可以通过城市名称找到城市代码:

package com.example.citycode;

import android.app.SearchManager;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.widget.SearchView;
import android.util.Log;
import android.view.Menu;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;

public class MainActivity extends ActionBarActivity {

  ListView lvData;
  DBHelper db;
  SimpleCursorAdapter scAdapter;
  Cursor cursor;
  Cursor cursor1;

  /** Called when the activity is first created. */
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Открываем подключение к БД
    db = new DBHelper(this);
    db.open();

    // Получаем intent, проверяем действие и получаем query
    Intent intent = getIntent();
    if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
      String query = intent.getStringExtra(SearchManager.QUERY);
      doMySearch(query);
      return;
    }

    // Получаем курсор
    cursor = db.getAllData();
    startManagingCursor(cursor);

    // Формируем столбцы сопоставления
    String[] from = new String[] { DBHelper.COLUMN_r_name, DBHelper.COLUMN_region, DBHelper.COLUMN_code};
    int[] to = new int[] { R.id.city_name, R.id.region_name, R.id.city_code };

    // Создааем адаптер и настраиваем список
    scAdapter = new SimpleCursorAdapter(this, R.layout.item, cursor, from, to);
    lvData = (ListView) findViewById(R.id.listdata);
    lvData.setAdapter(scAdapter);
  }

  public void doMySearch(String query) {
        //Ищем совпадения
        cursor1 = db.fetchRecordsByQuery(query);
        startManagingCursor(cursor1);
        String[] from = new String[] { DBHelper.COLUMN_r_name, DBHelper.COLUMN_region, DBHelper.COLUMN_code};
        int[] to = new int[] { R.id.city_name, R.id.region_name, R.id.city_code };
        scAdapter = new SimpleCursorAdapter(this,
                R.layout.item, cursor1, from, to);
        //Обновляем адаптер
        lvData = (ListView) findViewById(R.id.listdata);
        lvData.setAdapter(scAdapter);
      }

     @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Добавляем items в Action Bar
        getMenuInflater().inflate(R.menu.options_main, menu);
        // Получаем SearchView
        SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE);
        SearchView searchView = (SearchView) menu.findItem(R.id.action_settings).getActionView();
        // Устанавливаем текущий activity как searchable activity
        searchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
        searchView.setIconifiedByDefault(false);
        return true;
    }

  protected void onDestroy() {
    super.onDestroy();
    // закрываем подключение при выходе
    db.close();
  }
}

0 个答案:

没有答案