我在这里阅读了几篇关于循环游标时速度问题的帖子,并尝试了这些帖子中给出的答案,例如不要在循环中使用 getcolumnindex 调用一次等。
但是,如果数据库有大约 2400 条记录,则需要大约 3 到 5 分钟才能完成。
该循环以异步任务方法运行,因此它不会挂起设备,并且通过数据库适配器处理数据库。
循环代码如下:
while (!exportrec.isAfterLast()) {
if ( exportrec.moveToNext() ) {
fulldate = exportnumberformatter(exportrec.getInt(daye))
+"/"+exportnumberformatter(exportrec.getInt(monthe))+"/"
+String.valueOf(exportrec.getInt(yeare));
fulltime = exportnumberformatter(exportrec.getInt(houre))+":"
+exportnumberformatter(exportrec.getInt(mine))+":"
+exportnumberformatter(exportrec.getInt(sece));
noiseid = exportrec.getInt(typee);
exportedinfo += exporttypes[id] +","+exportrec.getString(notee)+","+
fulldate+","+fulltime+" \n" ;
}
}
exportnumberformatter 执行以下操作:
public String exportnumberformatter(int i) {
String result = Integer.toString(i);
if (result.length() >1 ) {
return Integer.toString(i);
}
String zeroprefix = "";
zeroprefix = "0"+result;
return zeroprefix ;
}
在循环之前调用游标如下获取数据:
exportrec = MD.GetAllLogs(2, "date_sort");
exportrec.moveToFirst();
MD 是数据库适配器和 GetAllLogs 方法(这是为了加快速度,所以这里使用的 date_sort 真的被忽略了):
public Cursor GetAllLogs(Integer i,String sortfield)
{
String sorted = "";
if (i == 1 ) {
sorted = "DESC";
} else if (i == 2) {
sorted = "ASC";
}
return mDB.query(DB_TABLE, new String[] {COL_ID, COL_TYPE,COL_IMAGE, COL_INFO,COL_IMAGE,COL_HOUR,COL_SEC,COL_MIN,COL_DAY,COL_MON,COL_YEAR,COL_SORT_DATE},
null, null, null, null, COL_ID+" "+sorted);
}
当我在数据库中创建表时,它没有索引,所以我通过升级方法创建了这些。但是,当我这样做时,它们没有出错或似乎失败了,但我不知道的是 A)在创建索引后是否需要重建数据库/表,以及 B)如何判断它们是否已创建?这两个索引基于作为第一个的 ID 和一个包含年月日小时分钟秒的字段,全部在 Long Integer 上。
我担心循环似乎需要很长时间才能阅读那么多记录。
更新:
rtsai2000 和 CL answer 的建议将速度从几分钟提高到几秒钟