SQLite批量插入Android代码示例

本文介绍了如何在Android中使用SQLite进行批量数据插入的操作,包括创建SQLiteStatement、构建INSERT OR REPLACE语句,以及通过BatchOperateDataSource接口处理数据源。示例代码详细展示了批量插入的完整流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

------------------------------代码的分割线---------------------------
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteStatement;

public class SQLiteBatchUpdateTool {

private static final String TAG = "SQLiteBatchUpdateTool";

public static interface BatchOperateDataSource {
  public int size();
  public boolean next();
  public void bindAllValues(SQLiteStatement statement);
}

public static boolean batchInsertOrUpdate(String logMsg,
SQLiteHelper helper, String table, String[] columns,
BatchOperateDataSource dataSource) {
  if (dataSource == null || dataSource.size() <= 0) {
    return false; // 没有数据无需更新
  }
  if (columns == null || columns.length <= 0) {
    Log.e(TAG, logMsg + "传入的列值不正确,不能构造sql");
    return false;
  }
  Log.i(TAG, logMsg + "开始:记录数=" + dataSource.size());
  long start = System.currentTimeMillis();
  long failedCnt = 0;
  long succCnt = 0;
  boolean result = false;
  try {
    synchronized (helper) {
      SQLiteDatabase db = helper.getWritableDatabase();
      try {
        db.beginTransaction();
          StringBuilder sql = new StringBuilder();
          sql.append("INSERT OR REPLACE INTO ");
          sql.append(table);
          sql.append('(');

          int columnNum = 0;
          for (String colName : columns) {
          sql.append((columnNum > 0) ? "," : "");
          sql.append(colName);
          ++columnNum;
          }
          sql.append(')');
          sql.append(" VALUES (");
          columnNum = 0;
          for (int i = 0; i < columns.length; i++) {
          sql.append((i > 0) ? ",?" : "?");
          ++columnNum;
          }
          sql.append(')');

          SQLiteStatement statement = db.compileStatement(sql.toString());
          while (dataSource.next()) {
          dataSource.bindAllValues(statement);
          if (statement.executeInsert() != -1) {
            ++succCnt;
          } else {
            ++failedCnt;
          }
          statement.clearBindings();
          }
          result = true;
          db.setTransactionSuccessful ();
      } catch (Exception e) {
        Log.e(TAG, logMsg + "执行数据库操作异常", e);
        result = false;
        } finally {
        if (db != null) {
        try {
          db.endTransaction();
          } catch (Exception e) {
          Log.e(TAG, logMsg + "结束数据库事务异常", e);
          }
          try {
          db.close();
          } catch (Exception e) {
          Log.e(TAG, logMsg + "关闭数据库异常", e);
          }
      }
    }
  }
} finally {
  Log.i(TAG, logMsg + "结束:耗时=" + (System.currentTimeMillis() - start) + "ms,更新成功=" + succCnt + ",更新失败=" + failedCnt);
  }
return result;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值