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

安卓开发获取数据库内的数据

使用SQLiteOpenHelper获取数据库数据

创建数据库帮助类

通过继承SQLiteOpenHelper实现数据库创建与版本管理:

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "app.db";
    private static final int VERSION = 1;
    public MyDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建表语句
        db.execSQL("CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 数据库升级逻辑
    }
}

查询数据流程

步骤 说明 代码示例
获取可读数据库 通过getReadableDatabase()获取只读数据库实例 SQLiteDatabase db = helper.getReadableDatabase();
执行查询 使用rawQuery()query()方法 Cursor cursor = db.query("users", null, null, null, null, null, null);
解析结果 遍历Cursor获取数据 while(cursor.moveToNext()){ String name = cursor.getString(1); }
关闭资源 必须手动关闭Cursor和数据库 cursor.close(); db.close();

使用Room持久化库获取数据

定义实体类

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

创建DAO接口

@Dao
public interface UserDao {
    @Query("SELECT  FROM users")
    LiveData<List<User>> getAllUsers(); // 支持观察者模式
    @Insert(onConflict = OnConflictStrategy.REPLACE)
    void insertUser(User user);
}

构建数据库对象

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

获取数据示例

AppDatabase db = Room.databaseBuilder(context, AppDatabase.class,"app.db").build();
LiveData<List<User>> users = db.userDao().getAllUsers();
users.observe(lifecycleOwner, new Observer<List<User>>() {
    @Override
    public void onChanged(List<User> users) {
        // 更新UI
        recyclerViewAdapter.submitList(users);
    }
});

线程处理方案对比

方案 适用场景 优点 缺点
AsyncTask 简单后台任务 快速实现 已过时,内存泄漏风险
RxJava 复杂数据流 链式调用灵活 学习成本高
Kotlin Coroutines 现代异步编程 语法简洁,轻量级 需要Kotlin支持
LiveData 生命周期感知 自动更新UI 仅支持观察数据变化

常见问题与解决方案

Q1:查询大量数据时应用卡顿怎么办?
A1:采用分页查询策略,

@Query("SELECT  FROM users LIMIT :limit OFFSET :offset")
List<User> getUsers(int limit, int offset);

配合PagingSource实现渐进式加载。

Q2:如何实现数据库实时更新?
A2:使用LiveDataFlowable包装查询结果:

@Query("SELECT  FROM users")
LiveData<List<User>> getAllUsers(); // Room会自动处理生命周期感知和数据更新通知
0