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

安卓创建数据库sqlite

在Android中创建SQLite数据库通常使用SQLiteOpenHelper类,继承并重写其onCreate、onUpgrade方法,在onCreate中执行SQL语句创建表结构,最后调用getWritableDatabase获取

SQLite数据库简介

SQLite是Android内置的轻量级数据库,支持本地存储结构化数据,适用于需要持久化存储的应用,如用户信息、配置数据等。

创建数据库步骤

  1. 继承SQLiteOpenHelper类
    通过继承SQLiteOpenHelper实现数据库创建和版本管理。

    安卓创建数据库sqlite  第1张

  2. 定义数据库参数
    设置数据库名称、版本号、表结构。

  3. 实现onCreate()方法
    在首次创建数据库时执行,用于创建表结构。

  4. 实现onUpgrade()方法
    当数据库版本升级时调用,用于修改表结构。

代码实现示例

// 1. 创建DBHelper类
public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "mydatabase.db"; // 数据库名称
    private static final int DATABASE_VERSION = 1; // 版本号
    // 表结构SQL语句
    private static final String CREATE_TABLE = 
        "CREATE TABLE users (" +
        "id INTEGER PRIMARY KEY AUTOINCREMENT," +
        "name TEXT NOT NULL," +
        "age INTEGER);";
    public MyDatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    // 2. 重写onCreate()方法
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE); // 创建表
    }
    // 3. 重写onUpgrade()方法
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        db.execSQL("DROP TABLE IF EXISTS users"); // 删除旧表
        onCreate(db); // 重新创建表
    }
}

数据库基本操作

操作类型 方法说明 代码示例
插入数据 insert() java DB.insert("users", null, contentValues);
查询数据 query() java Cursor cursor = DB.query("users", columns, selection, args, null, null, null);
更新数据 update() java DB.update("users", contentValues, "id=?", new String[]{String.valueOf(userId)});
删除数据 delete() java DB.delete("users", "age > ?", new String[]{"30"});

使用数据库

// 1. 实例化DBHelper
MyDatabaseHelper dbHelper = new MyDatabaseHelper(context);
// 2. 获取可写数据库
SQLiteDatabase db = dbHelper.getWritableDatabase();
// 3. 插入数据示例
ContentValues values = new ContentValues();
values.put("name", "张三");
values.put("age", 25);
db.insert("users", null, values);
// 4. 查询数据示例
Cursor cursor = db.query("users", 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"));
    Log.d("DB_RESULT", "ID:" + id + " Name:" + name + " Age:" + age);
}
cursor.close();

注意事项

  1. 数据库升级
    修改DATABASE_VERSION后,onUpgrade()会自动触发,需手动处理数据迁移。
  2. 线程安全
    同一数据库对象不建议跨线程使用,可通过getReadableDatabase()getWritableDatabase()获取独立实例。
  3. 资源释放
    使用完CursorSQLiteDatabase后需调用close()释放资源。

相关问题与解答

问题1:如何实现数据库版本升级时的数据迁移?

解答
onUpgrade()方法中,根据新旧版本差异执行迁移逻辑。

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    if (oldVersion < 2) {
        // 新增字段或表结构
        db.execSQL("ALTER TABLE users ADD COLUMN email TEXT");
    }
    // 其他版本升级逻辑...
}

问题2:多个线程操作数据库会导致什么问题?

解答
多线程直接操作同一SQLiteDatabase实例可能引发数据不一致或崩溃,解决方案:

  1. 为每个线程获取独立数据库实例(getWritableDatabase())。
  2. 使用事务(beginTransaction())保证原子性。
  3. 复杂场景可结合ContentProvider统一管理数据库
0