android SQLite大数据插入优化

android移动终端操作大数据优化。

1,使用事务:

SQLiteDatabase db = this.getWritableDatabase();//获取数据库可写对象
db.beginTransaction();//启动事务
try {
//执行10w条操作语句,例:insert into you_table (字段1,字段2,……) values ('a','b',……);
for(int i = 0;i < 100000;i++) {
db.execSQL(sql);
}
//以上数据操作全部成功,通过标记setTransactionSuccessful为true,事务才提交,否则回滚(默认标记为false)
db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();//错误的情况下就为false,事务就会rollback;
} finally {
db.endTransaction();//结束事务,有两种情况:commit,rollback, 
//事务的提交或回滚是由事务的标志决定的,如果事务的标志为True,事务就会提交,否侧回滚,默认情况下事务的标志为False
//标记事务成功,在此方法和endTransaction之间尽力不要有关于数据库的调用,否则,这期间出错,事务仍会提交。

}

这里10w条的数据在不同机子上执行的结果是不一样的,最快的每秒【3000条】,慢一点的机子每秒【1000条

想要更高效提升执行速度,可以采用下面这种方式。

2,使用预编译。

SQLiteDatabase db = this.getWritableDatabase();//获取数据库可写对象
db.beginTransaction();//启动事务
try {
//执行10w条操作语句,例:insert into you_table (字段1,字段2,……) values (?,?,……);

db.compileStatement(sql);//预编译处理


for(int i = 0;i < 100000;i++) {

// 插入数据
sqLiteStmt.bindString(1, "a");//填入参数1
sqLiteStmt.bindString(2, "b");//填入参数2
sqLiteStmt.executeInsert();//执行插入
}
//以上数据操作全部成功,通过标记setTransactionSuccessful为true,事务才提交,否则回滚(默认标记为false)
db.setTransactionSuccessful();
} catch (Exception e) {
e.printStackTrace();//错误的情况下就为false,事务就会rollback;
} finally {
db.endTransaction();//结束事务,有两种情况:commit,rollback, 
//事务的提交或回滚是由事务的标志决定的,如果事务的标志为True,事务就会提交,否侧回滚,默认情况下事务的标志为False
//标记事务成功,在此方法和endTransaction之间尽力不要有关于数据库的调用,否则,这期间出错,事务仍会提交。

}

【采用预编译处理速度上明显提升,最快的每秒【6000条】,慢一点的机子每秒【1500-2000条


以上内容根据实际项目得出的结论,如有不对之处,请指证,谢谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值