当前位置:首页 > 行业动态 > 正文

安卓开发数据库代码

SQLite数据库基础操作

创建数据库帮助类

public class DBHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "app.db";
    private static final int VERSION = 1;
    public DBHelper(Context context){
        super(context, DATABASE_NAME, null, VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建用户表
        String sql = "CREATE TABLE user(" +
                "id INTEGER PRIMARY KEY AUTOINCREMENT," +
                "name TEXT," +
                "age INTEGER)";
        db.execSQL(sql);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 数据库升级处理
        db.execSQL("DROP TABLE IF EXISTS user");
        onCreate(db);
    }
}

增删改查操作示例

// 插入数据
ContentValues values = new ContentValues();
values.put("name", "张三");
values.put("age", 25);
getWritableDatabase().insert("user", null, values);
// 查询数据
Cursor cursor = getReadableDatabase().query("user", null, null, null, null, null, null);
while(cursor.moveToNext()){
    int id = cursor.getInt(cursor.getColumnIndex("id"));
    String name = cursor.getString(cursor.getColumnIndex("name"));
    int age = cursor.getInt(cursor.getColumnIndex("age"));
}
cursor.close();

Room持久化库使用

定义实体类

@Entity(tableName = "user")
public class User {
    @PrimaryKey(autoGenerate = true)
    public int id;
    @ColumnInfo(name = "name")
    public String name;
    @ColumnInfo(name = "age")
    public int age;
}

创建DAO接口

@Dao
public interface UserDao {
    @Insert
    void insertUser(User... users);
    @Query("SELECT  FROM user WHERE id = :userId")
    User getUserById(int userId);
    @Update
    void updateUser(User user);
    @Delete
    void deleteUser(User user);
}

配置数据库

@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}

SQLite与Room对比

特性 SQLite Room
编译时检查 支持(通过注解)
线程安全 需手动处理 内置支持
返回值处理 原始Cursor LiveData/Flow
编译工具 自动生成相关代码
迁移支持 需手动实现 提供Migration API
最佳实践 需自行封装 符合架构组件设计理念

常见问题与解答

Q1:数据库版本升级时如何处理数据迁移?
A1:在Room中可以通过添加Migration对象处理:

安卓开发数据库代码

安卓开发数据库代码

static final Migration MIGRATION_1_2 = new Migration(1, 2) {
    @Override
    public void migrate(SupportSQLiteDatabase database) {
        // 创建新表字段
        database.execSQL("ALTER TABLE user ADD COLUMN address TEXT");
    }
};
AppDatabase db = Room.databaseBuilder(context, 
    AppDatabase.class, "app.db")
    .addMigrations(MIGRATION_1_2)
    .build();

传统SQLite需在onUpgrade()方法中执行SQL语句进行表结构变更。

Q2:如何优化数据库读写性能?
A2:性能优化建议:

安卓开发数据库代码

  1. 使用事务批量处理操作:database.beginTransaction()/setTransactionSuccessful()/endTransaction()
  2. 为常用查询字段建立索引:@Index(value = {"name"})
  3. 合理使用缓存机制(如Room的inMemoryDatabase
  4. 避免在主线程执行耗时操作,使用异步任务或协程处理
  5. 定期执行ANALYZE命令优化查询计划