[android]apkにデータベースファイルを含める

hidaka

2009/11/16

TAG
android

 アプリ作成の際、リソースとしてデータベースを含めたいことがあり、アプリの初期化でやってもいいんですが件数が多くなると初回起動が遅くなるしバージョンアップ対応がめんどくさくなりそうだし、というわけでSQLite形式のdbファイル自体をapkに含めてしまう方法です。

 主な流れは、

1.初回にassetフォルダからアプリのdatabasesフォルダに移動
2.通常通りDBにアクセス

流れと言おうとしたら2つで終わりました。調べてる時は面倒だったのにわかってしまえばこれだけですね。
以下コード。
public void copyFile(String srcFilePath) {
File dstFile;
String dst;
dst= "/data/data/" + this.getPackageName() + "/databases/";
dstFile=new File(dst);
dstFile.mkdirs();
dst+=srcFilePath;
dstFile = new File(dst);
InputStream input = null;
AssetManager as = getResources().getAssets();
OutputStream output = null;
try {
input = as.open(srcFilePath);
output = new FileOutputStream(dstFile);
int DEFAULT_BUFFER_SIZE = 1024 * 4;
byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
int n = 0;
while (-1 != (n = input.read(buffer))) {
output.write(buffer, 0, n);
}
input.close();
output.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

(参考:AndroidのFile入出力サンプル:throw Life様)

copyFile(DBファイル名)という形でassetフォルダのファイル名を指定し、アプリのdatabasesフォルダに移動します。
このフォルダに移動した以降は通常のSQLiteOpenHelperをextendしたクラス等から扱えますので、大量の初期データがある場合などにお使いください。

コメントを投稿する

トラックバック (0)

トラックバックURL: http://kiteretsu.kayac.com/cgi-bin/mt-tb.cgi/50