データベースを必要とするアプリケーションを作成します。4 つのテーブルが必要になり、各テーブルはアプリの 1 つの画面の情報を保持します。私の質問は、1 つのデータベース ヘルパー クラスを作成してその中にすべてのテーブルを配置できるか、または 4 つの異なるヘルパー クラスを作成して各テーブルを 1 つの個別のクラスに配置するべきかということです。違いはありますか?ありがとう
2 に答える
データベース ヘルパー クラスを 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();
}
}
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() を介して取得できます