Room数据库添加字段遇到的问题记录

Android 开发项目使用到了Room数据库。在业务不断完善的时候数据库都会发生变化。今天在给表增加列的时候遇到了一个问题。

Migration didn't properly handle xxx

我升级表的目的是为了给表增加一个布尔值

以下是出错的代码:

   从版本1迁移到版本2

在test_records表里面增加一列 is_tourists_data

val MIGRATION_1_2 = object : Migration(1, 2) {
    override fun migrate(database: SupportSQLiteDatabase) {
        database.execSQL("ALTER TABLE test_records ADD COLUMN is_tourists_data")
    }
}

运行后Android stuido 提示notNull不一致

最后修改代码

database.execSQL("ALTER TABLE test_records ADD COLUMN is_tourists_data INTEGER NOT NULL DEFAULT 0")

设置个默认值0(false)即可 NOT NULL DEFAULT 0

Android Studio中,如果你使用的是Room Persistence Library来创建和管理SQLite数据库添加数据通常涉及以下几个步骤: 1. **模型类**(Data Model): 首先,你需要定义你的数据实体类,它会映射到数据库表中。例如: ```java @Entity(tableName = "users") public class User { @PrimaryKey(autoGenerate = true) private int id; private String name; private String email; // getters and setters } ``` 2. **RoomDatabase**: 创建Room数据库类,包含一个RoomDataSource来处理插入操作。 ```java @Database(entities = {User.class}, version = 1) public abstract class AppDatabase extends RoomDatabase { public abstract UserRepository getUserRepository(); public static AppDatabase getInstance(Context context) { return Room.databaseBuilder(context.getApplicationContext(), AppDatabase.class, DATABASE_NAME).build(); } } // UserRepository public interface UserRepository { void insertUser(User user); } ``` 3. **添加数据**: 在需要的地方,通过UserRepository来插入数据。 ```java AppDatabase db = AppDatabase.getInstance(context); UserRepository userRepository = db.getUserRepository(); User newUser = new User("John", "john@example.com"); userRepository.insertUser(newUser); ``` 4. **运行迁移** (如果需要): 如果你修改了数据库结构,可以在`onCreate()`或`onUpgrade()`方法中执行迁移操作。 5. **在Dao中定义插入接口**: 如果你想使用更高级别的API,可以定义Dao(Data Access Object),然后在其中声明插入方法。 ```java @Dao public interface UserDao { @Insert(onConflict = OnConflictStrategy.IGNORE) void insert(User user); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值