📜  如何使用 SQLite 数据库在 Android 中预填充数据库(1)

📅  最后修改于: 2023-12-03 15:38:06.181000             🧑  作者: Mango

如何使用 SQLite 数据库在 Android 中预填充数据库

在 Android 应用程序开发中,SQLite 数据库是一个常用的存储数据的方式。预填充数据库可以使应用程序在第一次启动时就拥有初始数据,无需等待网络请求或手动添加数据,提高用户体验。本文将介绍如何使用 SQLite 数据库在 Android 中预填充数据库。

1. 创建 SQLite 数据库

在 Android 中创建 SQLite 数据库需要继承 SQLiteOpenHelper 类。首先需要创建一个继承自 SQLiteOpenHelper 的类,并实现 onCreate()、onUpgrade() 方法。

public class MyDatabaseHelper extends SQLiteOpenHelper {
    private static final String DB_NAME = "my_database.db";
    private static final int DB_VERSION = 1;

    public MyDatabaseHelper(Context context) {
        super(context, DB_NAME, null, DB_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // 创建表格等初始化操作
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // 升级数据库时的操作
    }
}
2. 创建预填充数据库

创建预填充数据库可以在 SQLiteOpenHelper 的 onCreate() 方法中进行。需将其放在一个事务中,以确保数据操作的一致性和效率。

@Override
public void onCreate(SQLiteDatabase db) {
    String CREATE_TABLE_SQL = "CREATE TABLE my_table ("
        + "id INTEGER PRIMARY KEY,"
        + "name TEXT)";
    db.execSQL(CREATE_TABLE_SQL);

    db.beginTransaction();
    try {
        ContentValues values = new ContentValues();
        values.put("id", 1);
        values.put("name", "张三");
        db.insert("my_table", null, values);

        values.clear();
        values.put("id", 2);
        values.put("name", "李四");
        db.insert("my_table", null, values);

        values.clear();
        values.put("id", 3);
        values.put("name", "王五");
        db.insert("my_table", null, values);

        db.setTransactionSuccessful();
    } finally {
        db.endTransaction();
    }
}
3. 复制预填充数据库

将预填充数据库复制到应用程序的 data 目录中,以便访问使用。可以将预填充数据库放置在 assets 目录中,通过 InputStream 将其读取到 data 目录中。

public void copyDatabaseFromAssets(Context context) {
    InputStream inputStream = null;
    OutputStream outputStream = null;
    try {
        inputStream = context.getAssets().open("my_database.db");
        String outPath = context.getDatabasePath("my_database.db").getPath();
        outputStream = new FileOutputStream(outPath);

        byte[] buffer = new byte[1024];
        int length;
        while ((length = inputStream.read(buffer)) > 0) {
            outputStream.write(buffer, 0, length);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (inputStream != null) {
                inputStream.close();
            }
            if (outputStream != null) {
                outputStream.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
4. 使用预填充数据库

使用预填充的数据库与使用自己创建的数据库没有区别。可以通过 SQLiteOpenHelper 获取 SQLiteDatabase 对象,进行数据的增删改查等操作。

MyDatabaseHelper dbHelper = new MyDatabaseHelper(context);
SQLiteDatabase db = dbHelper.getReadableDatabase();
Cursor cursor = db.query("my_table", 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("Test", "id=" + id + ", name=" + name);
    } while (cursor.moveToNext());
}
cursor.close();
db.close();

通过以上步骤,即可在 Android 应用程序中预填充 SQLite 数据库。预填充数据库可以很好地提高应用程序的用户体验,让应用程序更加流畅。