使用Room持久化库与SQLite一起

4

我有一个项目使用SqLite来存储数据。现在我想创建一些表格并使用Room持久性库来创建这些表格。 我可以使用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访问同一个数据库。会有什么问题吗?任何建议都将有所帮助 谢谢


只需使用相同的数据库名称,一切都会很好,除了日志中出现的这条:SQLiteLog:(5)语句在1处中止:[PRAGMA journal_mode = TRUNCATE]数据库已锁定。 - StayCool
1个回答

1

我能使用Room和Sqlite API访问同一个数据库吗?

不可以。 RoomDatabase 将是完全独立的数据库,您必须慢慢将表移动到新数据库中。这是使用 Room API 的唯一方法。

如果您列出的表是项目中唯一的表,那么在相当短的时间内就可以完成。我建议您完全从头开始使用 EntitiesDaos 创建新数据库。您最大的挑战将是将所有 SQLite 查询转换为 Daos,这可能需要最长的时间,但最终会值得。

我知道我需要使用迁移。如果使用迁移来方便使用这两个API怎么办。

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

按照此指南逐步迁移到Roomhttps://medium.com/google-developers/incrementally-migrate-from-sqlite-to-room-66c2f655b377


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接