android SQLite 批量插入数据慢的解决方案 (针对于不一样的android api 版本)

原地址 :http://www.cnblogs.com/wangmars/p/3914090.html html

 

  SQLite,是一款轻型的数据库,被普遍的运用到不少嵌入式的产品中,由于占用的资源很是少,二其中的操做方式几乎和咱们接触的数据库很少,甚至只有几百K的他天然会被需求者青睐,下面讲一下在这样的轻型数据库中怎么对他进行一些读写操做。android

  以前作选择联系人的时候出现若是一个手机里联系人超过2000的话,往数据库里面插入会很是耗时,不一样的手机存储的条数不一样,这个存储的数量和手机的内存有很大的关系,每每取决于手机内存,下面对于数据量大的状况来写一下sqlite的批量查询。sql

  SqLite 插入数据有几种
数据库

  第一种 :因为InsertHelper 这个类在android api17已经被废弃了,因此要是基于 以前开发的可使用api

 

复制代码
InsertHelper ih = new InsertHelper(db, "表名");
db.beginTransaction();
final int 列1= ih.getColumnIndex("列1");
final int 列2 = ih.getColumnIndex("列2");
try {
for (Station s : busLines) {
ih.prepareForInsert();
ih.bind(列1, 对应的值);
ih.bind(列2, 对应的值);
ih.execute();
}
db.setTransactionSuccessful();
} finally {
ih.close();
db.endTransaction();
db.close();
}
复制代码

 

 

第二种 :spa

  一样在 SQLiteDatabase 中 3d

复制代码
public void inertOrUpdateDateBatch(List<String> sqls) {
SQLiteDatabase db = getWritableDatabase();
db.beginTransaction();
try {
for (String sql : sqls) {
   db.execSQL(sql);
}
// 设置事务标志为成功,当结束事务时就会提交事务db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();
} finally {
// 结束事务db.endTransaction();
db.close();
}
}
复制代码

 

 

第三种:SQLiteDatabase  db.insert("table_name", null, contentValues) 中也能够批量插入code

复制代码
public void insertData(插入数据){
db.beginTransaction(); // 手动设置开始事务for (ContentValues v : list) {
db.insert("表名", null, v);
}
db.setTransactionSuccessful(); // 设置事务处理成功,不设置会自动回滚不提交
db.endTransaction(); // 处理完成db.close()
}
复制代码

 

   

第四种 :  SQLiteStatement  我的比较喜欢用这种方式,对数据的处理看的很清楚明了orm

复制代码
String sql = "insert into表名(对应的列) values(?)";
SQLiteStatement stat = db.compileStatement(sql);
db.beginTransaction();
for (数据集) {
  //循环所要插入的数据
}
db.setTransactionSuccessful();
db.endTransaction();
db.close();
复制代码

 

 

 

总结: 以上的几种方式都用到了数据库中的事务这个东西,sqlite语句在其中只会走一次,其余的就是数据循环到数据库中的对象里,这样比之前用对象插入,再用for在外围循环快的不知道多少倍,以前插入2000多条数据300多毫秒,之后对于上万条数据也是很是之快的。sqlite


来源:http://www.cnblogs.com/wangmars/p/3914090.html



相关文章
相关标签/搜索