如何将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
相关产品推荐
相关产品推荐

