-2

我将编写一个需要数据库的应用程序。我将需要四个表,每个表都将维护应用程序一个屏幕的信息。我的问题是我可以创建一个数据库助手类并将所有表放入其中,还是应该创建 4 个不同的助手类并将每个表放在一个单独的类中。有什么区别吗?谢谢

4

2 回答 2

1

我可以创建一个数据库助手类吗

是的。一个就够了。也考虑让你的DatabaseHelperas Singleton

将所有表格放入其中,或者我应该创建 4 个不同的辅助类并将每个表格放在一个单独的类中

就像我在上面写的那样,您会将所有表格归为一类。

有什么区别吗?

结果是一样的,但不同的是我猜你写的代码更少,你总是有一个 Helper 实例,代码会更干净,可读性更好。

想象一下某个商业公司拥有包含 20 个表的大型数据库。仍然公司只有一个数据库。

您可以将其想象SQLiteOpenHelper为一个大型数据库(它包含所有必需的逻辑)。因此,创建 4 个不同的类,每个类包含一个表是不合逻辑的。就像您将有 4 个数据库和一张表。

我的建议:

是创建一个通用DatabaseHelper的,它将包装所有必需的逻辑,然后为了实现干净且有效的解决方案,您可以创建四个将为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

您可以创建一个数据库助手类,并在应用程序的某处对其进行初始化,然后在您的活动中传递它。

您可以像这样为每个表创建一个类:

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 回答