数据库类型 | 特点 | 适用场景 |
---|---|---|
SQLite | 轻量级嵌入式数据库,支持SQL语法 | 本地数据存储,简单CRUD操作 |
Room | 基于SQLite的ORM框架,提供编译时校验 | 复杂数据关系,需要对象关系映射 |
// 1. 创建DatabaseHelper类 public class MyDatabaseHelper extends SQLiteOpenHelper { private static final String CREATE_TABLE = "CREATE TABLE IF NOT EXISTS user (id INTEGER PRIMARY KEY, name TEXT)"; public MyDatabaseHelper(Context context) { super(context, "app.db", null, 1); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL(CREATE_TABLE); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // 数据库升级处理 } } // 2. 执行插入操作 public void insertUser(String name) { MyDatabaseHelper dbHelper = new MyDatabaseHelper(context); SQLiteDatabase db = dbHelper.getWritableDatabase(); ContentValues values = new ContentValues(); values.put("name", name); long rowId = db.insert("user", null, values); // 返回新插入行的ID db.close(); }
// 1. 定义实体类 @Entity(tableName = "user") public class User { @PrimaryKey(autoGenerate = true) public int id; @ColumnInfo(name = "name") public String name; } // 2. 创建DAO接口 @Dao public interface UserDao { @Insert(onConflict = OnConflictStrategy.REPLACE) void insertUser(User... users); // 支持批量插入 } // 3. 获取数据库实例并插入 AppDatabase db = Room.databaseBuilder(context, AppDatabase.class, "app.db").build(); User user = new User(); user.name = "John Doe"; db.userDao().insertUser(user);
维度 | SQLite | Room |
---|---|---|
线程安全 | 需手动处理(建议子线程操作) | 默认支持多线程(通过LiveData) |
编译校验 | 无 | 有(通过注解处理器校验) |
返回值 | 长整型行ID/-1表示失败 | 可配置返回Long/List等类型 |
事务支持 | 需手动beginTransaction() | 自动处理事务 |
AUTO_INCREMENT
或重复插入相同主键// 在ViewModel中执行插入 public void addUser(User user) { new Thread(() -> { db.userDao().insertUser(user); // 更新LiveData会自动通知UI刷新 }).start(); }
A:
insert()
返回值,>表示成功,-1表示失败,可通过db.isDbLockedByCurrentThread()
判断线程状态。@Insert
返回值的ResultReceiver
或观察LiveData
变化,建议包裹try-catch
捕获SQLiteConstraintException
。A:
insert()
的可变参数版本一次插入多个对象db.beginTransaction()
和db.setTransactionSuccessful()
包裹插入操作AsyncTask
或WorkManager
在后台线程执行