Android SQLiteデータベースを作成する
Android SQLiteデータベースを作成する(SQL文をリソースファイルに定義する)
SQLiteOpenHelperクラスを使用したデータベース作成が、イマイチ使いにくいデス。(私には)
仕様
- データベースがあれば削除する。
- データベースを作成する。
- assets/sql/createtableフォルダに配置しているsqlを実行し、データベースにテーブルを作成する。
- Upgradeはない。
そこで自作のデータベースヘルパークラスを作ってみました。
MyDatabaseHelper.java
package com.example.helloandroid; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import android.content.Context; import android.content.res.AssetManager; import android.database.sqlite.SQLiteDatabase; public class MyDatabaseHelper { package com.example.helloandroid.service; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import android.content.Context; import android.content.res.AssetManager; import android.database.sqlite.SQLiteDatabase; public class DatabaseHelper { /* データベース名 */ private final static String DB_NAME = "HelloAndroid"; /* assetsフォルダのCreateTable文を配置しているディレクトリのパス*/ private final static String CREATETABLESQL_DIR= "sql/createtable"; /* コンテキストオブジェクト */ private Context mContext; /** * コンストラクタ * @param context */ public DatabaseHelper(Context context){ mContext = context; } /** * createDatabase * @param context * DBがあれば削除する。 * DBを作成する * DBテーブルを作成する。 */ public void createDatabase()throws IOException { if (isExistDatabase(mContext) == true){ //DBがあれば削除 mContext.deleteDatabase(DB_NAME); } //DB作成 SQLiteDatabase db = mContext.openOrCreateDatabase(DB_NAME, Context.MODE_PRIVATE, null); //DBテーブル作成 createTable(mContext,db); } /** * getReadableDatabase * 読込み用でデータベースをオープンします * @return */ public SQLiteDatabase getReadableDatabase() { SQLiteDatabase db = mContext.openOrCreateDatabase(DB_NAME, Context.MODE_WORLD_READABLE, null); return db; } /** * getWritableDatabase * 書き込み用でデータベースをオープンします * @return */ public SQLiteDatabase getWritableDatabase() { SQLiteDatabase db = mContext.openOrCreateDatabase(DB_NAME, Context.MODE_WORLD_WRITEABLE, null); return db; } /** * isExistDatabase * データベースをが存在するかを取得します。 * @param context * @return true=存在する false=存在しない */ private static boolean isExistDatabase(Context context){ boolean result = false; if ( context.getDatabasePath(DB_NAME).exists()){ result = true; } return result; } /** * createTable * データベースにテーブルを作成します。 * assets/sql/createに定義したsql文を実行します。 * @param context * @param db * @throws IOException */ private static void createTable(Context context,SQLiteDatabase db) throws IOException{ AssetManager as = context.getResources().getAssets(); String files[] = as.list(CREATETABLESQL_DIR); for (int i = 0; i < files.length; i++) { String sql = readFile(as.open(CREATETABLESQL_DIR + "/" + files[i])); db.execSQL(sql); } } /** * readFile * ファイルから文字列を読み込みます。 * @param is InputStream * @return ファイルの文字列 * @throws IOException */ private static String readFile(InputStream is) throws IOException{ BufferedReader br = null; try { br = new BufferedReader(new InputStreamReader(is,"SJIS")); StringBuilder sb = new StringBuilder(); String str; while((str = br.readLine()) != null){ sb.append(str +"\n"); } return sb.toString(); } finally { if (br != null) br.close(); } } }
MainActivity.java
import android.view.View; import com.example.helloandroid.R; public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return true; } /** * button1Click * button1クリック時の処理 * データベースを作成します。 */ public void button1Click(View view) { MyDatabaseHelper dbHelper = new MyDatabaseHelper(this); try { dbHelper .createDatabase(); } catch (IOException e) { e.printStackTrace(); } } }
0 件のコメント:
コメントを投稿