AndroidでSQLiteを使う SQLiteをクラス化する

Androidアプリでマスタデータの登録処理などをする場合、データの保存先としてローカルストレージを選択することがあります。データの登録、更新、削除、並べ替えなどの処理を考えるとデータベースを使用することが最も適しています。AndroidではデータベースとしてSQLiteが使えますが、データベースを使う場合は機能をまとめる、すなわちクラス化することが重要です。

Java以外のオブジェクト指向の他言語でも同様ですが、クラス化することで開発効率も高まり、品質の高いプログラムが開発できます。SQLiteをクラス化して使いやすくするサンプルのソースコードを掲載しましたので、実際のプログラミングにお役立てください。

SQLiteをクラス化したソースコード
package com.example.test;

import android.content.ContentValues;
import android.content.Context;
import android.content.ContextWrapper;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class Database extends ContextWrapper {
	private final static String DB_NAME = "test.db";
	private final static String DB_TABLE = "test";
	private final static String DB_COLUMUS = 
			"(item1 text, item2 text, item3 text, primary key(item1))";
	private final static int DB_VERSION = 1;
	private SQLiteDatabase mySQLiteDatabase = null;

	//コンストラクタ
	public Database(Context base) {
		super(base);
		mySQLiteDatabase = new DBHelper(base).getWritableDatabase();
	}

	//データベースクローズ
	public void closeDB() {
		mySQLiteDatabase.close();
		mySQLiteDatabase = null;
	}

	//データ読込
	public String[] readDB(String key) {
		String[] columus = new String[] {"item1", "item2", "item3"};
		Cursor cursor = mySQLiteDatabase.query
				(DB_TABLE, columus,  "item1='" + key + "'", null, null, null, null);
		if (cursor.moveToFirst()) {
			columus[0] = cursor.getString(0);
			columus[1] = cursor.getString(1);
			columus[2] = cursor.getString(2);
		} else {
			columus = null;
		}
		cursor.close();
		return columus;
	}

	//データ更新
	public void updateDB(String[] columus) {
		ContentValues values = new ContentValues();
		values.put( "item1", columus[0]);
		values.put( "item2", columus[1]);
		values.put( "item3", columus[2]);
		if (mySQLiteDatabase.update
				(DB_TABLE, values, "item1='" + columus[0] + "'", null) == 0) {
			mySQLiteDatabase.insert(DB_TABLE, null, values);
		}
	}

	//データ削除 オーバーロード
	public void deleteDB() {
		//全件削除
		mySQLiteDatabase.delete(DB_TABLE, null, null);
	}
	public void deleteDB(String key) {
		//1件削除
		mySQLiteDatabase.delete(DB_TABLE,  "item1='" + key + "'", null);
	}

	//データ件数取得
	public int getCount() {
		int count = 0;
		Cursor cursor = null;
		String[] columus = new String[] {"item1", "item2", "item3"};
		cursor = mySQLiteDatabase.query
				(DB_TABLE, columus,  null, null, null, null, null);
		count = cursor.getCount();
		cursor.close();
		return count;
	}

	//インナークラス データベースヘルパー
	class DBHelper extends SQLiteOpenHelper {
		public DBHelper(Context context) {
			super(context, DB_NAME, null, DB_VERSION);
		}
		@Override
		public void onCreate(SQLiteDatabase db) {
			db.execSQL
			("CREATE TABLE IF NOT EXISTS " + DB_TABLE +  " " + DB_COLUMUS);
		}
		@Override
		public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
			db.execSQL("DROP TABLE IF EXISTS " + DB_NAME);
			onCreate(db);
		}
	}
}
上記クラスの呼び出し方
データベースクラスのインスタンス化
Database database = new Database(this);
データ読込み
String[] columus = database.readDB("item1のデータ");
データ更新
String[] columus = new String[] {"item1のデータ", "item2のデータ", "item3のデータ"};		
database.updateDB(columus);
データ削除
database.deleteDB();  // 全件削除
database.deleteDB("item1のデータ");  //1件削除
データ件数取得
int count = database.getCount();
データベースクローズ
database.closeDB();