作者lovelycateye (我还想要更多力量)
看板AndroidDev
标题Re: [问题] DB资料大笔且快速写入Sqlite的方法
时间Thu Apr 21 06:21:36 2016
1F:→ ssccg: insert into XXXX values (…), (…), (…) … 04/20 17:16
2F:→ ssccg: 要sqlite 3.7.11(通常是android 4.1)以上 04/20 17:17
3F:→ ssccg: 应该有长度限制但是我不知道是多少,你可以例如一次一千笔 04/20 18:42
4F:→ joedenkidd: insert into table(...,...,...) select * from xxx 04/20 21:07
5F:→ joedenkidd: 这样子试看看吧!不知道可不可行.... 04/20 21:07
要注意这种方式 Sqlite 有限制一次最多只能写入 500 笔。
参考:
http://www.sqlite.org/limits.html#max_compound_select
6F:→ 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 帮你加速。
通常是先想想看有没有办法不要一直做这种一直大量写入的事情,
逼不得已就是有这种需求才来想怎麽加速写入。
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 219.85.82.103
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/AndroidDev/M.1461190901.A.44E.html
※ 编辑: lovelycateye (219.85.82.103), 04/21/2016 06:24:31
7F:推 f814030: 感谢您的回覆,看了范例是在创建Sqlite时就写入资料, 04/21 09:25
8F:→ f814030: 不过小弟遇到的问题是,从Oracle资料库Select出3万笔资料 04/21 09:26
9F:→ f814030: ,这时3万笔资料应该是在记忆体里面,目前是一笔一笔的写 04/21 09:27
10F:→ f814030: 入Sqlite,使用cv.put("xxx",aaa); 04/21 09:28
11F:→ f814030: db.insert("TableName", null, cv); 这种方式,时间秏时 04/21 09:28
12F:→ f814030: 约30分钟,所以才希望找更快的处理方式。 04/21 09:29
13F:→ f814030: 亦感谢您提供这种教学,小弟亦有收获,谢谢。 04/21 09:29
14F:→ bohei: 在外圈包了transaction还是需要30分钟? 04/21 09:55
15F:推 f814030: 是的,我外层有用beginTransaction(); 和 04/21 15:37
16F:→ f814030: setTransactionSuccessful()包起来,但还是需要30分钟。 04/21 15:37
17F:推 givemepass: 感谢猫神分享! 04/21 16:17
18F:推 drdsmile: 有学到有推~~ 感谢 04/22 17:01
19F:→ lovelycateye: 才3万笔写30分钟,你要不要看一下我丢的连结? 04/26 13:51
20F:→ lovelycateye: 没意外应该是你的 transaction 包的范围不对 04/26 13:52