ウェブアプリケーション,インジェクション,コマンドインジェクション

Androidアプリ開発 データを持続させる

SQLiteデータベースを試作

Pre-Creating the SQLite Databases

現実的なアプリケーションとして、時には実行時よりも設計時において、
データベースを事前に作成するのが、さらに効果的でしょう。
SQliteデータベースを試作するためには、インターネット上で
たくさんの無料ツールが入手できます。
その中の1つに、SQLiteデータベースブラウザがあります。
このSQLiteデータベースブラウザは異なるプラットフォーム用のものが、
無料で手に入ります。
http://sourceforge.net/projects/sqlitebrowser/を見てください。
SQLiteデータベースブラウザがインストールできたらまず、フィールドを
指示する形でテーブルを作り、データベースを作っていきます。
行でテーブルを設定していくのは、容易です。
ブラウザデータタブを使ったデータでテーブルを埋めていきます。
データベースができたら、プロジェクトのassetsフォルダの中に
データベースをドラッグ&ドロップで落とします。
次に、1つの位置から他にデータベースファイルをコピーするために、
CopyDB()メソッドを定義します。

package net.learn2develop/precreated;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity{
  @Override
  public void onCreate(Bundle savesInstanceState){
   super.onCreate(savedInstanceState);
   setContentView(R.layout.activity_main);
  }

  public void CopyDB(InputStream inputStream, OutputStream outputStream)
     throw IOException{
   //---Copy 1K bytes at a time---
   byte[] buffer = new byte[1024];
   int length;
   while((length = input Stream.read(buffer)) > 0){
    outputStream.write(buffer, 0, length);
   }
   inputStream.close();
   outputStream.close();
  }
}

この場合、ソースファイルから読み込むために
InputStreamオブジェクトを使うことに注目します。
そして、OutputStreamオブジェクトを使ってInputStreamオブジェクトを
目的のファイルに書き込みます。そのアクティビティが作られたときに、
Androidデバイス上の
/data/data/<プロジェクト名>/databases/フォルダの中にある
assetsフォルダにデータベースのコピーを配置されます。

package net.learn2develop.precreated;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity{
  DBAdapter db;
  @Override
  public void onCreate(Bundle savedInstanceState){
   super.onCreate(savedInstanceState);
   setContentView(R.layout.action_main);

   String destDir = "/data/data/" + getPackageName() + "/databases/";
   String destPath = destDir + "MyDB";
   File f = new File(destPath);
   if(!f.exists()){
    //---make sure directory exists---
    File directory = new File(destDir);
    directory.mkdirs();
    //---copy the db from the assets folder into the databases folder---
    try{
     CopyDB(getBserContext().getAssets().open("mydb"),
       new FileOutputStream(destPath));
    }catch(FileNotFoundException e){
     e.printStackTrace();
    }catch(IOExcption e){
     e.printStackTrace();
    }
   }
   db = new DBAdapter(this);
  }

  public void CopyDB(InputStream inputStream, OutputStream outputStream)
    throws IOException{
  .......
  }
}

ちょっと警告

データベースをコピーするのは、目的のフォルダにデータベースが
無い場合だけにしてください。
もしこのチェックをしないなら、assetsフォルダの中に
アクティビティと共にデータベースが上書きされて、
毎回アクティビティが作られます。
毎回アクティビティが作られるのは良いことではありません。
開発するアプリケーションが実行している間にデータベースファイルの
内容を変更するかもしれず、チェックをしなくて上書きをしている場合、
作成時以降の変更を帳消しにしてしまいます。


データベースが正確にコピーされるようにするために、
MyDBと名付けたデータベースが含まれているか確認するために
/data/data/<パッケージ名>/databasesフォルダをチェックします。
これでデータベースが使えるようになります。

ホーム
便利堂ロゴ
inserted by FC2 system