android中的数据库

时间:2013-03-17 22:12:02

标签: android database

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

2 个答案:

答案 0 :(得分:1)

  

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

是。一个就够了。另外,请考虑将DatabaseHelper设为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();
   }
}

答案 1 :(得分: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;
    }
}

然后从任何actvitiy你可以通过myDatabase.getInstance()

获得它