-2

データベースを必要とするアプリケーションを作成します。4 つのテーブルが必要になり、各テーブルはアプリの 1 つの画面の情報を保持します。私の質問は、1 つのデータベース ヘルパー クラスを作成してその中にすべてのテーブルを配置できるか、または 4 つの異なるヘルパー クラスを作成して各テーブルを 1 つの個別のクラスに配置するべきかということです。違いはありますか?ありがとう

4

2 に答える 2

1

データベース ヘルパー クラスを 1 つ作成できますか

はい。1つで十分です。DatabaseHelperあなたのようにすることも考えてくださいSingleton

そこにすべてのテーブルを配置するか、4 つの異なるヘルパー クラスを作成して、各テーブルを 1 つの個別のクラスに配置する必要があります

上で書いたように、すべてのテーブルを 1 つのクラスに配置します。

違いはありますか?

結果は同じになりますが、違いは、記述するコードが少なくて済み、ヘルパーのインスタンスが常に 1 つあるため、コードがよりクリーンで読みやすくなることです。

20 のテーブルを持つ大きなデータベースを持っている事業会社を想像してみてください。それでも会社には 1 つのデータベースしかありません。

1 つの大きなデータベースとして想像できSQLiteOpenHelperます (必要なすべてのロジックをラップします)。したがって、それぞれが 1 つのテーブルをラップする 4 つの異なるクラスを作成するのは論理的ではありません。1 つのテーブルに 4 つのデータベースがあるようなものです。

私のおすすめ:

必要なすべてのロジックをラップする 1 つのユニバーサルを作成し、クリーンで機能するソリューションを実現するために、各テーブルの操作をDatabaseHelper実装する 4 つのクラスを作成できます。CRUD

例:

public class UserTools {

   private SQLiteOpenHelper handler;
   private SQLiteDatabase db;

   public UserTools(SQLiteOpenHelper handler) {
      this.handler = handler;
   }

   public void insert(<data>) { ... }

   public void update(<data>) { ... }

   public void delete(<data>) { ... }

   public List<DataType> getAll() { ... }

   public DataType getObject(<data>) { ... }

   private final synchronized SQLiteDatabase openWrite(SQLiteOpenHelper handler) {
      return handler.getWritableDatabase();
   }

   private final synchronized SQLiteDatabase openRead(SQLiteOpenHelper handler) {
      return handler.getReadableDatabase();
   }
}
于 2013-03-17T22:55:19.007 に答える
0

1 つのデータベース ヘルパー クラスを作成し、それをアプリケーションのどこかで初期化して、アクティビティで渡すことができます。

次のように、各テーブルのクラスを作成できます。

public class CartTable {
// database table
public static final String TABLE_CART = "cart";
public static final String COLUMN_ID = "_id";
public static final String COLUMN_CART_GROCERY_ID = "cart_grocery_id"; // this is grocery_id
public static final String COLUMN_CART_GROCERY_NAME = "cart_grocery_name";

// database creation SQL statement
public static final String DATABASE_CREATE = "create table "
        + TABLE_CART
        + "(" + COLUMN_ID + " integer primary key autoincrement, "
        + COLUMN_CART_GROCERY_ID + " integer unique, "
        + COLUMN_CART_GROCERY_NAME + " text);";

public static void onCreate(SQLiteDatabase database) {
    database.execSQL(DATABASE_CREATE);
}

public static void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
    Log.w(CategoryTable.class.getName(), "Upgrading database from version "
            + oldVersion + " to " + newVersion
            + ", which will destroy all old data");
    database.execSQL("DROP TABLE IF EXISTS " + TABLE_CART);
    onCreate(database);
}

}

onCreate で次のようなことを行うデータベース ヘルパー クラスを作成します。

class myDatabaseHelper extends SQLiteOpenHelper{
    @Override
    public void onCreate(SQLiteDatabase db) {
        CartTable.onCreate(db);
    } 
    //.....get read/write database methods etc
}

最後に、そのインスタンスを作成および維持するシングルトン クラスを作成します。

class myDatabase{
    private static MyDatabaseHelper myDatabaseHelper;

    public static MyDatabaseHelper getInstance(){
        if (myDatabaseHelper == null)
            myDatabaseHelper = new MyDatabaseHelper();
        return myDatabaseHelper;
    }
}

次に、任意のアクティビティから myDatabase.getInstance() を介して取得できます

于 2013-03-17T22:58:26.137 に答える