i++

プログラム系のメモ書きなど

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 から引っ張ってくるように設定しています。