私はOOPに少し慣れていないので、私は物事を正しく行っているかどうか知りたいです。データベースとの通信のために、SQLiteHelper witchが通常のすべての処理(onCreate、onUpdate)を実行し、接続を開いたり閉じたりするクラスを作成しました。
これがクラスです。現時点ではテーブルにありますが、さらに追加される予定です。
public class SQLiteHelper extends SQLiteOpenHelper{
public static final String DATABASE_NAME = "notebook";
public static final int DATABASE_VERSION = 2;
public static final String TABLE_LIST = "list";
public static final String TABLE_LIST_ID = "_id";
public static final String TABLE_LIST_NAME = "name";
public SQLiteDatabase db;
public SQLiteHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
// TODO Auto-generated constructor stub
}
@Override
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL("create table " + TABLE_LIST + "(" + TABLE_LIST_ID
+ " integer primary key autoincrement, " + TABLE_LIST_NAME
+ " text not null);");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// TODO Auto-generated method stub
db.execSQL("DROP TABLE IF EXISTS " + TABLE_LIST);
onCreate(db);
}
public void open(){
db = getWritableDatabase();
}
public void close(){
db.close();
}
}
次に、テーブルごとに、新しいクラスを作成します。witchは前のクラスを拡張し、その特定のテーブルに関連するすべての操作を実行します。たとえば、ListSQL:
public class ListSQL extends SQLiteHelper {
public ListSQL(Context context) {
super(context);
}
public void delete(int id) {
open();
db.delete(TABLE_LIST, TABLE_LIST_ID + " = " + id, null);
close();
}
}
私の質問は、OOPではこれが正しいやり方ですか?特に、ListSQLでのopen / closeメソッドとdbおよびTABLE変数の使用法は、私にはちょっと奇妙に思えますか?