import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import android.app.Activity;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
public class KenpoActivity extends Activity {
private String DB_PATH;
private String DB_NAME;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i("kenpoActivity", "onCreate()");
setContentView(R.layout.minpo);
DB_PATH = "/data/data/" + this.getPackageName() + "/databases/";//
DB_NAME = "ropou.db";
DatabaseHelper dbHelper = new DatabaseHelper(this, DB_NAME, null, 1);
//データベースが在るか確認する
boolean DatabaseCheck = databaseExists(DB_PATH,DB_NAME);
if(DatabaseCheck){
Log.i("kenpoActivity", "データベース在り" );
}else{
//データベースが無い場合assetsフォルダのデータベースをコピー
Log.i("kenpoActivity", "データベース無し" );
//空のデータベース作成
dbHelper.createEmptyDataBase();
//データベースコピー
//databaseCopy(DB_PATH,DB_NAME);
//データベースが圧縮されている場合
databaseUnZipCopy(DB_PATH,DB_NAME);
}
}
/*
* データベースの存在確認
*/
private boolean databaseExists(String path, String name) {
// TODO 自動生成されたメソッド・スタブ
SQLiteDatabase checkDb = null;
try {
String dbPath = path + DB_NAME;
checkDb = SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READONLY);
} catch (SQLiteException e) {
// データベースはまだ存在していない
Log.i("kenpoActivity", "データベースが無い");
}
if (checkDb != null) {
Log.i("kenpoActivity", "データベースが在る");
checkDb.close();
}
return checkDb != null ? true : false;
}
/*
* データベースのコピー
*/
private void databaseCopy(String path, String name) {
// TODO 自動生成されたメソッド・スタブ
try {
InputStream mInput = this.getAssets().open( name );//assetsフォルダのデータベース
// デフォルトのデータベースパスに作成した空のDB
String outFileName = path + DB_NAME;
OutputStream mOutput = new FileOutputStream(outFileName);
// コピー
byte[] buffer = new byte[1024];
int size;
while ((size = mInput.read(buffer)) > 0) {
mOutput.write(buffer, 0, size);
}
// Close the streams
mOutput.flush();
mOutput.close();
mInput.close();
} catch (IOException e) {
// TODO 自動生成された catch ブロック
e.printStackTrace();
}
}
/*
* データベースのコピー 圧縮されている場合
*/
private void databaseUnZipCopy(String path, String name) {
// TODO 自動生成されたメソッド・スタブ
try {
AssetManager am = getResources().getAssets();
InputStream is = am.open("ropou.zip",AssetManager.ACCESS_STREAMING);
ZipInputStream zis = new ZipInputStream(is);
ZipEntry ze = zis.getNextEntry();
if (ze != null) {
String fullPath = path + DB_NAME;
FileOutputStream fos = new FileOutputStream(fullPath, false);
byte[] buf = new byte[1024];
int size = 0;
while ((size = zis.read(buf, 0, buf.length)) > -1) {
fos.write(buf, 0, size);
}
fos.close();
zis.closeEntry();
}
zis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* データベースヘルパー
*/
public class DatabaseHelper extends SQLiteOpenHelper {
public DatabaseHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
// TODO 自動生成されたコンストラクター・スタブ
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO 自動生成されたメソッド・スタブ
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO 自動生成されたメソッド・スタブ
}
//空のデータベース作成
public void createEmptyDataBase(){
Log.i("kenpoActivity", "空のデータベース作成" );
this.getReadableDatabase();
}
}
}
空のデータベース作成する部分は、databases フォルダがある場合は必要ないが、
アプリをインストールした時には、databases フォルダが無いので必要になる、
作成されるデータベースのパーミッションもちゃんと設定できるので、
空のデータベースを作成する部分は必要
0 件のコメント:
コメントを投稿