SQLiteDatabase db = dh.getWritableDatabase();
db.execSQL("PRAGMA cache_size=12000;");
db.beginTransaction();
try {
for (int i = 0; i < 10000; i++) {
String id = "8aebf7b03e410db4013e43ed2369" + String.format("%04d", i);
String sql = generateSql();
SQLiteStatement sqlListStatment = db.compileStatement(sql);
sqlListStatment.bindString(1, id);
sqlListStatment.bindString(2, "20130426091902-187");
sqlListStatment.executeInsert();
// db.execSQL(sql);
}
db.setTransactionSuccessful();
} catch (android.database.SQLException e) {
e.printStackTrace();
} finally {
db.endTransaction();
db.close();
dh.close();
}
性能优化要点,
1,使用事务
db.beginTransaction();
db.setTransactionSuccessful();
db.endTransaction();
使用事务后1万条数据需要13秒左右插入完成
2,使用SQLiteStatement ,预先编译sql再执行,通过传递参数方式来插入数据
改造成这种方式后1万条数据需要8秒左右插入完成
下面是如果用ormlite的时候的处理方法
关键是TransactionManager.callInTransaction和dao.executeRaw函数加上args
try {
TransactionManager.callInTransaction(em.getConnectionSource(), new Callable<Void>() {
@Override
public Void call() throws Exception {
try {
Dao<?, ?> dao = null;
dao = em.findDao(Task.class);
em.enableCache();
for (int i = 0; i < 10000; i++) {
String id = "8aebf7b03e410db4013e43ed2369" + String.format("%04d", i);
String sql = generateSql();
Log.d("MyTag", sql);
String[] args = new String[] { id, "20130426091902-187" };
dao.executeRaw(sql, args);
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
});
} catch (SQLException e) {
e.printStackTrace();
}
从结果来看用Ormlite还是慢了些,一个9378毫秒,一个6613毫秒,如果谁还有大批量操作sqlite数据库优化的相关内容,麻烦给我留言,谢谢
- 大小: 21.7 KB
分享到:
相关推荐
下载来的资源,自己改了一下,共享出来,供小白使用,本想免费的,无奈最少是2分,再次吐槽一下csdn的下载规则变更,越来越商业化了。
Node.js结合sqlite3模块实现Sqlite数据库建表并实现大数据量的快速插入
网上收集的sqlite避免重复插入数据。
Android中在sqlite插入数据的时候默认一条语句就是一个事务,因此如果存在上万条数据插入的话,那就需要执行上万次插入操作,操作速度可想而知。因此在Android中插入数据时,使用批量插入的方式可以大大提高插入速度...
这个代码创建了两个数据库,分别使用一个一个插入的方法和批量插入的方法,并且打印出时间,查看不同方法不同插入条数所使用的时间。
android中SQLite数据库中用insert同时插入多条记录的方法和效率比较
今天在向Sqlite数据库里插入数据的时候,报了这样一个错: 代码如下: “too many terms in compound SELECT” 去Stackoverflow上查了一下,发现有人回答这个问题:链接 原来一次性向数据库里插入数据的条数不能太...
android sqlite示例代码
我更倾向于使用第二种方式:使用系统创建的数据库,然后批量插入数据。批量插入数据也有很多方法,那么那种方法更快呢,下面通过一个demo比较一下各个方法的插入速度。 1、使用db.execSQL(sql) 这里是把要插入
在Android studio上实现了sqlite的数据的新建、查询、添加、删除等功能。
一个简单的Android SQLite ORM框架不想花资源分的同学可以上我的github主页下载:https://github.com/chenyihan/Simple-SQLite-ORM-Android,因为要传到github,所以代码中的注释和doc文档都是英文的,对自己英文不...
需要在sqlite数据库中插入大量测试数据,打算用事务进行循环插入操作,不过sqlite不支持declare变量定义,所以无法通过定义循环变量值来实现。需要通过一个批处理文件来循环调用插入sqlite语句,方式如下 建立一个...
C# sqlite 批量更新及性能测试
Android的SQLite中DateTime类型数据的存取问题
sqlite3写入性能优化,使用事务结合执行准备的方法,极大地提升写入性能, 使用内存数据库(:memory:)模式高速写入,最后转存磁盘,也可提升部分性能
主要介绍了C#/.Net 中快速批量给SQLite数据库插入测试数据,本文直接给出实例代码,需要的朋友可以参考下
Android+SQlite 简单的《学生信息管理系统》(实现基本增删改查) 此代码中还有与其相对应的apk文件(在SIMS/bin目录中),大家可先行放手机上看一下效果。 希望对初学者有一定的帮助。(本人自己编写)
一个android读取sqlite数据库的数据并用listview显示demo,如有问题及时提醒。