Android : SQLite で Cursor の Column を別名で返す
- SQLiteOpenHelper (SQLiteDatabase) を使っているデータベースを持っている
- そのデータベースのテーブルを使って SearchView に検索候補を返したい
- しかしテーブルのカラムには SearchManager.SUGGEST_COLUMN_TEXT_1 がない!
という場合などに使います。
具体的には SELECT X as Y という構文を使って rawQuery を実行します。
以下の様な感じです。
public Cursor getSuggestions(String word) { SQLiteDatabase db = getReadableDatabase(); String query = "SELECT " + BaseColumns._ID + ", " + COLUMN_MY_WORDS + " AS " + SearchManager.SUGGEST_COLUMN_TEXT_1 + ", " + BaseColumns._ID + " AS " + SearchManager.SUGGEST_COLUMN_INTENT_DATA + " FROM " + TABLE_NAME + " WHERE " + COLUMN_MY_WORDS + " LIKE ?"; // 前後にワイルドカード(%)を入れている return db.rawQuery(query, new String[] { "%" + word + "%" }); }
検索候補表示に使う Cursor として必須なのは BaseColumns._ID と SearchManager.SUGGEST_COLUMN_TEXT_1 です。
加えて、検索候補がクリックされた時に Intent に格納され Intent.getData() / getDataString() で取得できる SearchManager.SUGGEST_COLUMN_INTENT_DATA を _ID から引っ張ってくるように設定しています。