android sql 批量处理插入/修改/删除 操作通用代码
16lz
2021-01-23
这个就没图了,直接上代码吧:
核心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();
更多相关文章
- Android使用Intent传输数据
- Android sqlite数据库存取图片信息
- android中intent传递数据的方式
- Android数据显示之ListView
- Android studio 解析网页数据,把网页Json格式的数据提取到Android
- Android模拟返回Back操作