sqliteでファイルの違うDBで結合をしたい

このエントリーをはてなブックマークに追加

androidのSQLiteでDBファイルが違うファイルを結合したい。例えば郵便番号とか都道府県データの静的なDBと動的なユーザー用のDBがあって、静的なDBはassetsからコピー、動的なユーザー用DBは普通に追加訂正削除していく。で、これらを結合したい。調べたら「ATTACH DATABASE」というのを使えばできるみたい。

「DatabaseHelper1」は動的なDB、「DatabaseHelper2」は静的なDBとする。
「DatabaseHelper1」のテーブル「Table1」の列「Id」で「DatabaseHelper2」のテーブル「Table2」で列「Title」を検索すると、以下になる。

DatabaseHelper1 dbHelper = new DatabaseHelper1(this);
SQLiteDatabase db = dbHelper.getReadableDatabase();
db.execSQL("ATTACH DATABASE '" + this.getDatabasePath(DatabaseHelper2.DATABASE_NAME) + "' AS DB2");
String query = "SELECT A.Id, B.Title FROM Table1 A INNER JOIN DB2.Table2 B WHERE A.Id = B.Id;";
Cursor c = db.rawQuery(query, null);

最初にこれをやろうとしたところエラーが出た。内容はText Encordingを合わせる必要があると、エンコーディングは以下のコマンドでわかる。

pragma encoding;

で、sqlite3用ツールで作成した静的DBは「UTF-16le」で、android内で作成した動的DBは「UTF-8」だった。既存の「UTF-16le」のDBを「UTF-8」に変換する方法はわからなかったので(たぶんできない?)、「UTF-8」でDBを作成し直して、データをインポートしたら動いた。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です