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

安卓开发如何打开数据库

配置与初始化数据库

在安卓中操作SQLite数据库通常需要以下步骤:

  1. 继承SQLiteOpenHelper
    创建自定义类继承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 users (id INTEGER PRIMARY KEY, name TEXT)");
        }
        @Override
        public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
            // 升级表逻辑
            db.execSQL("DROP TABLE IF EXISTS users");
            onCreate(db);
        }
    }
  2. 获取数据库实例
    通过getWritableDatabase()getReadableDatabase()获取可写/只读数据库对象。

    MyDatabaseHelper dbHelper = new MyDatabaseHelper(context);
    SQLiteDatabase db = dbHelper.getWritableDatabase(); // 自动创建/打开数据库

数据库基本操作

增删改查(CRUD)

操作类型 方法示例 说明
插入 db.insert("users", null, contentValues) ContentValues存储键值对
查询 db.query("users", columns, selection, args) 返回Cursor游标
更新 db.update("users", contentValues, "id=?", args) 影响行数返回int
删除 db.delete("users", "id=?", args) 影响行数返回int

示例代码

// 插入数据
ContentValues values = new ContentValues();
values.put("name", "Alice");
long rowId = db.insert("users", null, values);
// 查询数据
Cursor cursor = db.query("users", null, null, null, null, null, null);
if (cursor.moveToFirst()) {
    do {
        int id = cursor.getInt(cursor.getColumnIndex("id"));
        String name = cursor.getString(cursor.getColumnIndex("name"));
        Log.d("DB", "ID: " + id + ", Name: " + name);
    } while (cursor.moveToNext());
}
cursor.close();

使用工具查看数据库

Android Studio内置工具

  • Device File Explorer
    路径:/data/data/包名/databases/

    安卓开发如何打开数据库

    .db文件拖到电脑,用sqlite3或图形化工具(如DB Browser)打开。

  • Stetho调试工具
    集成Stetho库后,通过Chrome浏览器访问http://localhost:8080/,在Database标签页实时查看数据。

    安卓开发如何打开数据库

第三方库

库名 用途 特点
Room 抽象SQLite操作 编译时校验,支持LiveData
GreenDao ORM框架 高性能,支持复杂查询
Realm 跨平台数据库 支持多线程,数据模型更灵活

常见问题与解决方案

问题描述 解决方案
主线程操作数据库导致卡顿 使用AsyncTaskExecutorService在子线程执行数据库操作。
数据库文件找不到 检查SQLiteOpenHelperDATABASE_NAME是否正确,确保应用有写入存储权限。
表结构变更导致崩溃 onUpgrade()中处理表结构迁移,或增加VERSION触发升级逻辑。

相关问题与解答

问题1:如何选择合适的数据库框架?

  • 原生SQLite:适合简单场景,需手动管理线程和SQL语句。
  • Room:推荐长期维护项目,提供编译安全、LiveData绑定等特性。
  • GreenDao/Realm:需要复杂查询或高性能需求时使用。

问题2:如何在Room中定义实体和DAO?

// 实体类
@Entity(tableName = "users")
public class User {
    @PrimaryKey(autoGenerate = true)
    public int id;
    @ColumnInfo(name = "name")
    public String name;
}
// DAO接口
@Dao
public interface UserDao {
    @Insert
    void insert(User user);
    @Query("SELECT  FROM users WHERE id = :userId")
    User getUserById(int userId);
}
// 数据库类
@Database(entities = {User.class}, version = 1)
public abstract class AppDatabase extends RoomDatabase {
    public abstract UserDao userDao();
}