如何在android后面的数据库中添加大量的记录

时间:2015-09-09 08:38:52

标签: android database ormlite

我需要在我的Android应用程序中将大量数据插入数据库。我有一个包含listview的对话框,其中包含行名称,日期,频率,其中频率值可以是“Daily”,“Monthly”,“Quarterly”,“Yearly”。在向listview添加行之后,我需要单击done按钮将这些数据保存到数据库中。我需要根据频率值存储每一行​​。也就是说,如果频率值是“每日”,我需要将1095(即3 * 365 - > 3年的每日记录)记录存储到该名称的数据库中,类似于每个频率值(“每月” - - > 3 * 12,“Quarterly” - > 3 * 4,...)因此它会导致行大量插入数据库,导致执行时间过长,因此用户可能感觉不好而且他不能在没有完成此操作的情况下执行应用程序中的任何其他操作。我正在使用ORMLite将数据添加到数据库。我已按照以下方式执行此操作。

for (int i = 0; i < listAdapter.getCount(); i++) {
    Account rowAcct = new Account();
    rowAcct = listAdapter.getItem(i);
    if (rowAcct.getFreq().equals("Daily")) {
        for (int y = 0; y < 1095; y++) {
            Account nwEvt = new Account();
            dueDt = saveController.getNextDay(dueDt);
            nwEvt.setDueDate(dueDt);
            evtId = saveController.createAcc(nwEvt);
        }
    } else if (rowAcct.getFreq().equals("Monthly")) {
        for (int y = 0; y < 35; y++) {
            Account nwEvt = new Account();
            Date dueDt = saveController.getNextMonth(dueDt);
            nwEvt.setDueDate(dueDt);
            saveController.createAcc(nwEvt);
        }
    } else if (rowAcct.getFreq().equals("Quarterly")) {
        for (int y = 0; y < 11; y++) {
            Account nwEvt = new Account();
            dueDt = saveController.getQuarterMonth(dueDt);
            nwEvt.setDueDate(dueDt);
            evtId = saveController.createAcc(nwEvt);
        }
    } else if (rowAcct.getFreq().equals("Half-Yearly")) {
        for (int y = 0; y < 5; y++) {
            Account nwEvt = new Account();
            Date dueDt = saveController.getHalfYear(dueDt);
            nwEvt.setDueDate(dueDt);
            saveController.createAcc(nwEvt);
        }
    } else if (rowAcct.getFreq().equals("Yearly")) {
        for (int y = 0; y < 2; y++) {
            Account nwEvt = new Account();
            Date dueDt = saveController.getNextYear(dueDt);
            nwEvt.setDueDate(dueDt);
            saveController.createAcc(nwEvt);
        }
    }
}
dialog.dismiss();

如何最大限度地缩短此插入时间或在后台进行此插入过程并使用户可以在应用程序中自由执行其他操作?请建议我通过让用户免费来执行此操作的最佳方式。

2 个答案:

答案 0 :(得分:1)

首先需要在工作线程中使用DB执行所有工作。只需使用android内置AsyncTasks

第二次检查thisthis答案以改进db中的插入。

答案 1 :(得分:0)

好的,使用AsyncTaskLoader =)它检查当前的Activity状态=)