这个就没图了,直接上代码吧:

核心java类:

package com.test.utils;//这里填写你自己的包import java.util.ArrayList;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;import android.database.sqlite.SQLiteStatement;import android.util.Log;public abstract class BulkDatabase {private final String TAG = BulkDatabase.class.getSimpleName();private String sql;protected boolean isBulking = false;protected ArrayList list;//这里采用ArrayList而不是采用List避免向上转型影响性能,如果需要则可以改为List或其他数据结构private Context mContext;public BulkDatabase() {}public String getSql() {return sql;}public void setSql(String sql) {this.sql = sql;}public ArrayList getList() {return list;}public void setList(ArrayList list) {this.list = list;}//这里建议传入Application的Context避免内存泄露问题。public BulkDatabase(String sql, ArrayList list,Context context) {super();this.sql = sql;this.list = list;mContext=context;}/** * 使用批量插入前一定要实现。 *  * @param stat */public abstract void setStatement(SQLiteStatement stat);/** * 执行批量插入,请在调用钱复写setStatement方法,然后实现循环插入/删除... */public synchronized void doBulk() {Long startTime = System.currentTimeMillis();isBulking = true;SQLiteOpenHelper helper = new SQLiteOpenHelper(mContext, DATABASE_NAME, null, DATABASE_VERSION);//这里的传入你的数据库名称和版本。try (SQLiteDatabase database = helper.getReadableDatabase()) {helper.onCreate(database);SQLiteStatement stat = database.compileStatement(sql);database.beginTransaction();setStatement(stat);if (isBulking) {database.setTransactionSuccessful();// 这里设置是否完成数据库的批量操作,如果不设置则自动回滚,也就是放弃批量操作。}database.endTransaction();} catch (Exception e) {e.printStackTrace();Log.i(TAG, "doBulk error:" + e.getMessage());}if(!isBulking){rollBack();}Long endTime = System.currentTimeMillis();Log.i(TAG, "bulk use time:" + (endTime - startTime));}/***回滚之后需要进行的操作。*/protected abstract void rollBack();/***取消批量处理操作*/public void cancelBulk() {isBulking = false;}public boolean isCancel(){return !isBulking;}}


例子实现一个批量插入:

 private class MyInsertBulkDatabase extends BulkDatabase{        @Override        public void setStatement(SQLiteStatement stat){            int number = list.size();            for(int i = 0; i < number; i++){                FileInfo fileInfo = list.get(i);//这里的FileInfo是需要你修改成你需要插入的数据信息集合                if(isBulking){                    stat.bindString(1, fileInfo.fileName);//这里绑定数据                         stat.executeInsert();                } else{                    break;                }            }        }@Overrideprotected void rollBack() {//回滚后实现你需要的操作。}};


使用:

ArrayList list=new ArrayList<>();//这里的FileInfo是需要你修改成你需要插入的数据信息集合list.add(new FileInfo("test")); MyInsertBulkDatabase mInsertBulkDatabase=new MyInsertBulkDatabase(sql,list,getApplicationContext());//这里建议放入后台线程运行。mInsertBulkDatabase.doBulk();








更多相关文章

  1. Android使用Intent传输数据
  2. Android sqlite数据库存取图片信息
  3. android中intent传递数据的方式
  4. Android数据显示之ListView
  5. Android studio 解析网页数据,把网页Json格式的数据提取到Android
  6. Android模拟返回Back操作

随机推荐

  1. 解析Android消息处理机制:Handler/Thread/
  2. Android(安卓)Webview适配屏幕宽度
  3. Android3.2运行报错:[2011-09-09 14:50:21
  4. 相对布局
  5. Android开发环境的搭建
  6. Android设置任何控件透明度
  7. Android(安卓)控件及其属性2
  8. 日拱一卒(二十二)
  9. Android(安卓)NDK生成共享库和静态库
  10. Kotlin Android(安卓)Extensions+Android