Re: [问题] DB资料大笔且快速写入Sqlite的方法

楼主: lovelycateye (我还想要更多力量)   2016-04-21 06:21:36
→ ssccg: insert into XXXX values (…), (…), (…) … 04/20 17:16
→ ssccg: 要sqlite 3.7.11(通常是android 4.1)以上 04/20 17:17
→ ssccg: 应该有长度限制但是我不知道是多少,你可以例如一次一千笔 04/20 18:42
→ joedenkidd: insert into table(...,...,...) select * from xxx 04/20 21:07
→ joedenkidd: 这样子试看看吧!不知道可不可行.... 04/20 21:07
要注意这种方式 Sqlite 有限制一次最多只能写入 500 笔。
参考:http://www.sqlite.org/limits.html#max_compound_select
→ passli: 查询 bulk insert 04/21 00:35
通常这种需求就 beginTransaction 下去开始一直写就好了。
可以考虑用 prepared statement 再帮你加速,不需要每次 compile SQL statement。
可以参考看看这篇:
https://www.codeofaninja.com/2013/12/android-sqlite-transaction-tutorial.html
虽然我不知道你的需求和情况,不过如果…
- 资料不会变动,可以考虑直接先产生好 sqlite db 预载在程式内
- 资料比较长时间才变动一次,可以考虑 Server 预先产生好 sqlite db
再丢到网络空间去下载?例如 AWS S3 之类的,还可以用 CDN 帮你加速。
通常是先想想看有没有办法不要一直做这种一直大量写入的事情,
逼不得已就是有这种需求才来想怎么加速写入。
作者: ssccg (23)   2015-04-20 17:16:00
insert into XXXX values (…), (…), (…) …要sqlite 3.7.11(通常是android 4.1)以上应该有长度限制但是我不知道是多少,你可以例如一次一千笔
作者: joedenkidd (优质的蓝色射手)   2015-04-20 21:07:00
insert into table(...,...,...) select * from xxx这样子试看看吧!不知道可不可行....
作者: passli   2015-04-21 00:35:00
查询 bulk insert
作者: f814030 (f814030买者会视接单数量)   2016-04-21 09:25:00
感谢您的回复,看了范例是在创建Sqlite时就写入资料,不过小弟遇到的问题是,从Oracle数据库Select出3万笔资料,这时3万笔资料应该是在内存里面,目前是一笔一笔的写入Sqlite,使用cv.put("xxx",aaa);db.insert("TableName", null, cv); 这种方式,时间秏时约30分钟,所以才希望找更快的处理方式。亦感谢您提供这种教学,小弟亦有收获,谢谢。
作者: bohei (run and fall)   2016-04-21 09:55:00
在外圈包了transaction还是需要30分钟?
作者: f814030 (f814030买者会视接单数量)   2016-04-21 15:37:00
是的,我外层有用beginTransaction(); 和setTransactionSuccessful()包起来,但还是需要30分钟。
作者: givemepass (λ)   2016-04-21 16:17:00
感谢猫神分享!
作者: drdsmile (smile D)   2016-04-22 17:01:00
有学到有推~~ 感谢
楼主: lovelycateye (我还想要更多力量)   2016-04-26 13:51:00
才3万笔写30分钟,你要不要看一下我丢的连结?没意外应该是你的 transaction 包的范围不对

Links booklink

Contact Us: admin [ a t ] ucptt.com