我有一个使用SqLite存储数据的项目。现在,我想创建一些表,并想使用Room Persistence库创建这些表。
我可以使用Room和Sqlite Api访问同一数据库吗?

这是我的sqlite代码

public class DatabaseHelper extends SQLiteOpenHelper {

// Table names
static final String TABLE_FOOD = "_food_table";
static final String TABLE_CUISINE = "_cuisine_table";
static final String TABLE_UNITS = "_units_table";
static final String TABLE_INGREDIENTS = "_ingredients_table";
static final String TABLE_CART = "_cart_table";
public static final String CLIENT_TABLE_CART = "_client_cart_table";
static final String TABLE_SUPPLIER = "_supplier_table";

private static final String DB_NAME = "duplate.db";
private static final int DB_VERSION = 3;

这是我的Room数据库创建代码
@Database(entities = arrayOf(IngredientType::class), version = 3)
    abstract class AppDatabase : RoomDatabase() {

       abstract fun ingredientTypeDao(): IngredientTypeDao

       companion object {
           private val DB_NAME = "duplate.db"
          @Volatile
          private var instance: AppDatabase? = null

        @Synchronized
        fun getInstance(context: Context): AppDatabase? {
            if (instance == null) {
                instance = create(context)
            }
           return instance
        }

        private fun create(context: Context): AppDatabase {
            return Room.databaseBuilder(
                    context,
                    AppDatabase::class.java,
                    DB_NAME).build()
        }
    }}

我知道我需要使用迁移。如果方便迁移,则可以同时使用这两个API。需要建议。
现在,我想使用sqlite或room访问同一数据库。请问有什么问题吗?任何建议都会有所帮助
谢谢

最佳答案

我可以使用Room和Sqlite Api访问同一数据库吗?

不,你不能。 RoomDatabase将是一个完全独立的数据库,您将不得不将表缓慢移至新数据库。这是使用Room API的唯一方法。

如果您列出的表是项目中唯一的表,则它在相当短的时间内看起来是可行的。我建议您完全使用EntitiesDaos从头开始创建新数据库。您面临的最大挑战是将所有SQLite查询转换为Daos,这可能需要最多的时间,但最终还是值得的。

我知道我需要使用迁移。如果方便迁移,则可以同时使用这两个API。

迁移仅用于处理Room数据库中的数据库升级。这与在SQLite中调用onUpgrade相同。

请按照本指南逐步移至Room:
https://medium.com/google-developers/incrementally-migrate-from-sqlite-to-room-66c2f655b377

07-24 09:49
查看更多