0

我正在尝试构建一个 sqlite 数据库。它有 2800 个条目。当我尝试插入时,需要一分钟左右,然后会给出系统错误消息。下面给出相应的代码。

在创建数据库 java 文件中,

ContentValues cv4 = new ContentValues();    
public long createVariantEntry(String varid, String makeid, String modelid, String varname, String posteddate) {        
    cv4.put(VARIANT_ID, varid);
    cv4.put(VARIANT_MAKE_ID, makeid);
    cv4.put(VARIANT_MODEL_ID, modelid);
    cv4.put(VARIANT_NAME, varname);
    cv4.put(VARIANT_POSTED_DATE, posteddate);
    return Database.insert(VARIANT_TABLE_NAME, null, cv4);
}

在主活动中,

for(int i = 0; i<build_emp_database.size();i++)
{                   
    md.createVariantEntry(build_emp_database.get(i).get(0), build_emp_database.get(i).get(1), build_emp_database.get(i).get(2), build_emp_database.get(i).get(3), build_emp_database.get(i).get(4));                                
}

另外,2800个条目,需要一分钟多,有什么办法可以加快速度吗?我有几个小型数据库,并且已成功加载它们。这是唯一的大数据库,它在插入时会产生问题。请帮助我哪里出错了。

4

2 回答 2

1

如果你做了很多插入操作,你需要使用ContentProviderOperation优化你的数据库操作。像这些:

 ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
     for(int i = 0; i<build_emp_database.size();i++) {
       ContentProviderOperation.Builder builder = 
                 ContentProviderOperation.newInsert(yourUrl);
        builder.withValue(VARIANT_ID, varid)
               .withValue(VARIANT_MAKE_ID, makeid)
               ...
        ops.add(builder.build());
    }

     yourContentResolver.applyBatch(yourauthority, ops);
于 2013-05-07T04:58:53.390 回答
1

对于初学者,不要尝试在 UI 线程上运行插入操作。

我建议您调查使用内容提供程序作为数据库的包装器。ContentResolver 对象提供批量操作的方法,通常是一种更强大的数据库处理方式。使用 IntentService 在后台运行插入操作。

于 2013-05-07T03:33:53.837 回答