android移动终端操作大数据优化。
1,使用事务:
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条】】