Android Studio创建数据库表的一个问题

有一次在项目中利用Java反射技术获取创建数据库表的时候,程序崩掉了,出现了下面的问题
这里写图片描述

但是实体类里面并没有这个字段

public class Person {
    private String name;
    private int age;
}

同时我在控制台打印了属性的名称和类型,发现多了一个字段

这里写图片描述

名称为$change,类型为com.android.tools.fd.runtime.IncrementalChange
就是因为出现了这个字段才会导致创建数据库表失败,那么问题来了,为什么会出现这个字段呢?找了好久在stackoverflow上找到了,就是因为使用了instant run,才会导致加入这个字段,所以我们应该关闭这个功能,才能成功创建数据库表。
http://stackoverflow.com/questions/34647546/a-weird-field-appear-in-android-studio

### 如何在 Android Studio 中使用 SQLite 创建数据库 #### 使用 SQLiteOpenHelper 创建数据库 为了在 Android 应用程序中创建并管理 SQLite 数据库及其格,通常会扩展 `SQLiteOpenHelper` 类来实现自定义功能。以下是具体的方法: 通过继承 `SQLiteOpenHelper` 并重写其两个主要方法——`onCreate()` 和 `onUpgrade()` 来完成数据库的初始化以及版本更新操作[^1]。 ```java import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DatabaseHelper extends SQLiteOpenHelper { private static final String DATABASE_NAME = "mydatabase.db"; private static final int DATABASE_VERSION = 1; public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { // 定义 SQL 命令用于创建 String CREATE_TABLE_USERS = "CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER)"; // 执行 SQL 命令 db.execSQL(CREATE_TABLE_USERS); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 如果有新版本,则删除旧并重新创建 db.execSQL("DROP TABLE IF EXISTS users"); onCreate(db); } } ``` 此代码片段展示了如何利用 `SQLiteDatabase` 对象执行 SQL 脚本来构建名为 `users` 的,该具有三个字段:`id`, `name`, 和 `age`[^2]。 #### Kotlin 版本中的 Room 持久化库替代传统 SQLite 方法 对于更复杂的项目或者希望减少手动编写 SQL 查询的工作量时,推荐采用 Google 提供的 Room 持久化库作为更高层次抽象层封装原生 SQLite API 。Room 可以简化许多常见任务,并提供编译期验证机制防止运行时期错误发生[^3]。 首先,在项目的 build.gradle 文件里添加依赖项: ```gradle implementation 'androidx.room:room-runtime:2.4.0' kapt 'androidx.room:room-compiler:2.4.0' // 注意如果使用的是 Java 则替换 kapt -> annotationProcessor ``` 接着按照如下方式声明实体类、DAO 接口及最终的应用级数据库实例对象即可轻松完成相同目标而无需直接接触底层语句语法细节。 --- #### 总结 无论是选择传统的基于 `SQLiteOpenHelper` 的解决方案还是现代化的 Room 架构支持下的途径都可以满足开发者关于怎样在 Android 环境下借助 SQLite 技术建立专属本地持久化存储空间的需求。每种方案各有优劣之处需依据实际应用场景灵活选用最为合适的那一种。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值