You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SQLite数据库插入数据量翻倍?附Office表插入代码

实现SQLite数据库Office表插入数据量翻倍的可行方案

嘿,我来帮你搞定这个SQLite插入数据量翻倍的需求!根据你提供的代码片段,我整理了几个实用的方案,你可以根据实际场景选择:

方案一:复用原有插入逻辑,快速实现记录数翻倍

如果你的需求是把原本要插入的2条记录变成4条(完全复制原有数据),这个方案最简单直接。核心思路是把原有构建2条记录的逻辑封装好,然后重复执行插入操作,或者直接复制数据列表。

代码示例:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public void insertOffices(SQLiteDatabase db) {
    // 1. 先构建原本要插入的2条记录的数据
    List<ContentValues> originalOfficeData = new ArrayList<>();

    // 第一条:Orange tours
    ContentValues orangeValues = new ContentValues();
    Bitmap orangeBitmap = ((BitmapDrawable) context.getDrawable(R.drawable.orange)).getBitmap();
    byte[] orangeImageBytes = convertImage.bitmapToByte(orangeBitmap);
    orangeValues.put(DBContract.Office.COL_OFFNAME, "اورنج تورز");
    orangeValues.put(DBContract.Office.COL_OFFIMAGE, orangeImageBytes);
    // 补充你原本代码里的其他字段(比如COL_XXX)
    // orangeValues.put(DBContract.Office.COL_XXX, 对应值);
    originalOfficeData.add(orangeValues);

    // 第二条:假设你原本的第二条记录(这里需要你补充实际字段值)
    ContentValues secondOfficeValues = new ContentValues();
    Bitmap secondBitmap = ((BitmapDrawable) context.getDrawable(R.drawable.your_second_image)).getBitmap();
    byte[] secondImageBytes = convertImage.bitmapToByte(secondBitmap);
    secondOfficeValues.put(DBContract.Office.COL_OFFNAME, "第二条办公室名称");
    secondOfficeValues.put(DBContract.Office.COL_OFFIMAGE, secondImageBytes);
    // secondOfficeValues.put(DBContract.Office.COL_XXX, 对应值);
    originalOfficeData.add(secondOfficeValues);

    // 2. 翻倍数据:直接复制原有列表的内容,变成4条
    originalOfficeData.addAll(originalOfficeData);

    // 3. 执行插入
    for (ContentValues values : originalOfficeData) {
        db.insert(DBContract.Office.TABLE_NAME, null, values);
    }
}

适用场景:

数据量小,需要快速实现需求,不需要考虑性能优化的情况。


方案二:事务批量插入,提升翻倍后的插入性能

如果翻倍后数据量较大(比如后续可能还要继续扩容),推荐用SQLite事务来批量插入,减少磁盘IO次数,提升插入效率。

代码示例:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public void insertOffices(SQLiteDatabase db) {
    // 1. 构建原有2条记录的数据(和方案一一致)
    List<ContentValues> originalOfficeData = new ArrayList<>();
    // ...(省略构建orangeValues和secondOfficeValues的代码,同方案一)
    originalOfficeData.add(orangeValues);
    originalOfficeData.add(secondOfficeValues);

    // 2. 翻倍数据
    originalOfficeData.addAll(originalOfficeData);

    // 3. 开启事务批量插入
    db.beginTransaction();
    try {
        for (ContentValues values : originalOfficeData) {
            db.insert(DBContract.Office.TABLE_NAME, null, values);
        }
        // 标记事务成功,否则会回滚
        db.setTransactionSuccessful();
    } finally {
        // 结束事务(无论成功失败都会执行)
        db.endTransaction();
    }
}

适用场景:

数据量较大,或者需要频繁执行插入翻倍操作的场景,能有效提升性能。


方案三:单条记录字段数据量翻倍(特殊场景)

如果你的需求不是记录数翻倍,而是每条记录内的某个字段数据量翻倍(比如图片字节数组大小翻倍),可以针对特定字段做处理。比如把图片的字节数组复制拼接:

代码示例:

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public void insertOffices(SQLiteDatabase db) {
    ContentValues values = new ContentValues();
    // 处理图片字节数组,翻倍数据
    Bitmap bitmap = ((BitmapDrawable) context.getDrawable(R.drawable.orange)).getBitmap();
    byte[] originalImageBytes = convertImage.bitmapToByte(bitmap);
    // 拼接两次原字节数组,实现数据量翻倍
    byte[] doubledImageBytes = new byte[originalImageBytes.length * 2];
    System.arraycopy(originalImageBytes, 0, doubledImageBytes, 0, originalImageBytes.length);
    System.arraycopy(originalImageBytes, 0, doubledImageBytes, originalImageBytes.length, originalImageBytes.length);

    values.put(DBContract.Office.COL_OFFNAME, "اورنج تورز");
    values.put(DBContract.Office.COL_OFFIMAGE, doubledImageBytes);
    // 补充其他字段...

    // 插入记录(如果原本要插2条,就重复这个逻辑)
    db.insert(DBContract.Office.TABLE_NAME, null, values);
    // 插入第二条记录...
}

适用场景:

需要单独扩容某字段数据量的特殊需求,比如测试数据库存储极限等。


内容的提问来源于stack exchange,提问作者yo aq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:45:27