MSe*_*iz5 3 sqlite ftp android insert arraylist
在问题的底部解决问题
我有一个FTP服务器,上面有超过3,000张图片,我将图片名称保存到ArrayList.在此之后,我想将它们从arraylist保存到数据库,这需要非常非常非常的时间!看到:
同
FTPFile[] files = ftpClient.listFiles();
for (FTPFile file : files) {
imageNames.add(file.getName());
}
Run Code Online (Sandbox Code Playgroud)
我得到所有这些文件的列表并将它们保存到ArrayList imageNames中.这非常快,不需要超过1 - 最多2秒.
现在我想把这个数组向后写到我的sqlite数据库.当我这样做时,需要花费很长时间才能完成!我等了2分多钟......
int i = imageNames.size() - 1;
int q = 0;
while(i >= 0){
String insert_arraylist = "INSERT INTO ARRAYLIST (STRING) VALUES ('"+imageNames.get(q)+"')";
db.execSQL(insert_arraylist);
i--;
q++;
}
Run Code Online (Sandbox Code Playgroud)
那么我怎样才能加快插入速度?
提前致谢!
解决方案:(从2分钟到不到3秒;))
FTPFile[] files = ftpClient.listFiles();
insert_arraylist = "";
ContentValues con = new ContentValues();
for (FTPFile file : files) {
imageUrls.add("http://192.168.99.104/GetThePicture/thumbs/"+file.getName());
}
int i = imageUrls.size() - 1;
int q = 0;
db.beginTransaction();
try{
while(i >= 0){
String insert_arraylist = "INSERT INTO ARRAYLIST (STRING) VALUES ('"+imageUrls.get(q)+"')";
db.execSQL(insert_arraylist);
i--;
q++;
}
db.setTransactionSuccessful();
} catch(Exception e){
} finally {
db.endTransaction();
}
Run Code Online (Sandbox Code Playgroud)
小智 7
问题是,对于每个execSQL,您正在创建一个新事务并提交.要解决此问题,请创建一个事务并立即提交所有内容.或者你可以创建组(例如,每100行提交一次)
db.beginTransaction();
try {
while(i >= 0){
String insert_arraylist = "INSERT INTO ARRAYLIST (STRING) VALUES ('"+imageNames.get(q)+"')";
db.execSQL(insert_arraylist);
i--;
q++;
}
db.setTransactionSuccessful();
} catch {
// Handle exceptions.
} finally {
db.endTransaction();
}
Run Code Online (Sandbox Code Playgroud)
我建议按照以下帖子中的说明进行批量插入:
它为您提供了多个示例.就我个人而言,我注意到SQLite插入非常慢,而对于3000插入,其正常需要很长时间,除非你进行批量插入.
因此,想法与发布的其他海报相同,即在一个交易中完成所有操作:
db.beginTransaction();
for (entry : listOfEntries) {
db.insert(entry);
}
db.setTransactionSuccessful();
db.endTransaction();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2998 次 |
| 最近记录: |