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

安卓开发中数据库的连接数据库

安卓数据库连接常用SQLite/Room本地存储,或Retrofit/Firebase远程

安卓本地数据库(SQLite)连接与操作

SQLite数据库特点

特性 描述
轻量级嵌入式数据库 无需独立服务器,直接集成在APP中
单文件存储 数据库以.db文件形式存储在设备内部存储或SD卡(需权限)
ACID特性 支持原子性、一致性、隔离性、持久化事务

基础操作步骤

// 1. 创建数据库帮助类(继承SQLiteOpenHelper)
public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "app_data.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 user(id INTEGER PRIMARY KEY,name TEXT)");
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 数据库升级处理
        db.execSQL("DROP TABLE IF EXISTS user");
        onCreate(db);
    }
}
// 2. 使用数据库帮助类获取实例
MyDatabaseHelper dbHelper = new MyDatabaseHelper(context);
SQLiteDatabase db = dbHelper.getWritableDatabase(); // 读写数据库
// 或 dbHelper.getReadableDatabase(); // 只读数据库
// 3. 执行增删改查操作
ContentValues values = new ContentValues();
values.put("name", "John");
db.insert("user", null, values); // 插入数据

高级操作建议

  • 使用Room持久化库:提供编译时校验,避免运行时错误
  • 异步处理:通过AsyncTaskCoroutine避免阻塞主线程
  • 数据观察:结合LiveData实现数据库变更自动通知UI更新

远程数据库连接方案

通过Web API间接访问

技术栈 作用
Retrofit + OkHttp 网络请求封装与HTTP通信
Gson/Moshi JSON数据解析
Dagger/Hilt 依赖注入管理网络模块生命周期
// Retrofit接口定义
public interface ApiService {
    @GET("users")
    Call<List<User>> getUsers();
}
// 使用示例
Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("https://api.example.com/")
    .addConverterFactory(GsonConverterFactory.create())
    .build();
ApiService apiService = retrofit.create(ApiService.class);

直接JDBC连接(不推荐)

// 需添加MySQL驱动依赖
Class.forName("com.mysql.jdbc.Driver");
Connection conn = DriverManager.getConnection(
    "jdbc:mysql://192.168.1.100:3306/test_db", 
    "username", 
    "password");

缺点

  • 移动端直连数据库存在安全风险
  • 需处理复杂网络环境(NAT穿透、防火墙)
  • 违反三层架构设计原则

ORM框架选择对比

框架 特性
GreenDao 轻量级,支持注解式开发,需手动管理关系映射
Realm 高性能跨平台数据库,支持复杂查询,内存占用较高
Room Android官方推荐,基于SQLite,强制类型安全,需配合ViewModel使用

常见问题与解决方案

数据库文件损坏处理

  • 症状SQLiteDatabaseCorruptException异常
  • 解决方案
    • 检查onUpgrade()中的迁移逻辑
    • 使用db.isOpen()检测连接状态
    • 定期备份数据库文件(SQLiteDatabase.backup()

多线程并发控制

  • 问题:多个线程同时写入导致数据不一致
  • 解决方案
    • 使用synchronized代码块
    • 开启事务(db.beginTransaction()
    • 采用Singleton模式管理数据库连接实例

相关问题与解答

Q1:为什么Room框架要求API 21+?

A:Room的@Query注解依赖androidx.sqlite.db.SupportSQLiteQuery,该类在API 21以下存在兼容性问题,可通过room-runtime分离包解决:

implementation "androidx.room:room-runtime:2.5.1" // 不包含注解处理器
annotationProcessor "androidx.room:room-compiler:2.5.1"

Q2:如何实现SQLite数据库的加密?

A:可使用SQLCipher扩展库,步骤如下:

  1. 替换原始SQLiteOpenHelpernet.sqlcipher.database.SQLiteOpenHelper
  2. 调用SQLiteDatabase.loadLibs(context)加载加密库
  3. 设置密钥:db.execSQL("PRAGMA key='your-password'");
  4. 所有CRUD操作前需先设置密钥
0