→ 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:00insert into XXXX values (…), (…), (…) …要sqlite 3.7.11(通常是android 4.1)以上应该有长度限制但是我不知道是多少,你可以例如一次一千笔
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分钟。
作者:
drdsmile (smile D)
2016-04-22 17:01:00有学到有推~~ 感谢
才3万笔写30分钟,你要不要看一下我丢的连结?没意外应该是你的 transaction 包的范围不对