android - 加快数据库写入

标签 android listview sqlite android-cursoradapter

我有一个 ListActivity,它使用 CursorAdapter 来显示一些数据。此数据是网络服务调用的结果。

我正在从网络服务调用中获取响应,使用 org.json.* 库对其进行解析,然后将结果写入应用程序的 SQLite3 数据库。然后重新查询 ListActivity 的 Cursor,数据显示在列表中。

我的问题是数据库写入速度太慢。我唯一能想到的就是不使用 CursorAdapter 并将这些数据保存在内存中。我希望有人有另一个建议来加快速度。也许是某种批量插入?

请注意,我正在使用 ContentProvider 进行插入。所以我调用 getContentResolver().insert(...)。

以下是通过 LAN 在 56 行数据中检索并显示它们的测试的一些时间:

响应时间:178 毫秒

解析json的时间:16ms

向数据库写入 56 行的时间:5714ms

对于这种数据量,我最终希望数据库写入时间低于 1000 毫秒。

最佳答案

我曾经遇到过一些问题,发现首先在您的数据库上调用 beginTransaction(),然后再执行您的插入查询。示例代码:

    public void insertClassBatch(ArrayList<Class> batch) throws Exception
{
    this.getWritableDatabase().beginTransaction();
    for (Class c : batch)
    {
        this.insertClassStatement.bindString(1, c.getClassName());
        this.insertClassStatement.bindString(2, c.getClassValue());
        this.insertClassStatement.executeInsert();
    }
    this.getWritableDatabase().setTransactionSuccessful();
    this.getWritableDatabase().endTransaction();
}

这将插入 100 行(在这种情况下是批处理的大小)从大约 30 秒减少到 300 毫秒左右。

关于android - 加快数据库写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6552469/

相关文章:

java - Android SQLite 数据库上的 ORMLite groupByRaw 和 groupBy 问题

android - 当用户点击播放按钮时我想要视频自动播放视频播放

c# - ListView 列宽自动

sqlite - 用于非常基本的 GUI 应用程序的快速应用程序开发工具

android - 我应该使用哪种方法来执行 "complex"UPDATE 语句?

java - 如何从内部匹配值获取节点键

Javascript Battery API 返回无限放电时间

sqlite - sqlite 'file change counter'超过最大大小时是否溢出?

android - mLayout.addView() 只工作一次

java - 如何删除 fragment 中的 ListView 项?