1

私は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変数の使用法は、私にはちょっと奇妙に思えますか?

4

3 に答える 3

0

Androidのマニュアルによると、SQLiteOpenHelperを使用する場合、データベースを閉じる必要はありません。システムがあなたに代わってそれを行います。

于 2013-01-22T23:14:38.407 に答える
-3

上記の @Dan のように、 SQLiteOpenHelper を使用している場合、読み取り/書き込み操作を行うたびにデータベースを開いたり閉じたりする必要はありませ。データベースを使用する最良の方法は次のとおりです。

1.

次のように、Application基本クラスでSQLiteHelperのインスタンスを宣言して初期化します。

public class App extends Application {
  public static SQLiteHelper db;

  @Override
  public void onCreate() {
    super.onCreate();
    db = new SQLiteHelper(getApplicationContext());
    db.open();

  }
}

2.

アクティビティ、または DB を使用するその他の場所で、次のように SQLiteHelper オブジェクトを初期化します。

SQLiteHelper db = App.db;

そして、データベースを開いたり閉じたりすることを心配することなく、好きなようにデータベースを使用できます (:

于 2014-03-11T05:51:43.077 に答える