java - 如何在 Android 中加速从 .txt 解析数据并写入 SQLite?

标签 java android sqlite

我正在尝试从 .txt 文件中解析数据,然后将其写入数据库。我需要一个单词,并且它是连续的第一个字母。以下是我处理文本文件的方法:

private String convertStreamToString(InputStream is)
        throws UnsupportedEncodingException {

    StringBuilder stringBuilder = new StringBuilder();
    BufferedReader reader = new BufferedReader(new InputStreamReader(is));
    String line;
    try {
        while (true) {
            line = reader.readLine();
            if (line == null) {
                break;
            }
            allCities = stringBuilder.append(line).toString();
        }
    } catch (IOException e) {
        Log.e("error", e.getMessage());
    }
    return allCities;
}


private String getAllWordsString() throws IOException {

    AssetManager am = context.getAssets();
    InputStream is = am.open(Constants.FILE_NAME);
    allWords = convertStreamToString(is);
    is.close();

    return allWords;
}

这是我将其写入数据库的方法:

public void inputDBFeed(MyWord model) {
    ContentValues cv = new ContentValues();
    cv.put(Constants.COLUMN_NAME, model.getName());
    cv.put(Constants.COLUMN_FIRST_LETTER, model.getFirstLetter());
    database.insert(Constants.MAIN_DB_NAME, null, cv);
}

 public void prepareDBFeed() {

    try {
        allWords = this.getAllWordsString();
    } catch (IOException e) {
        Log.e("Error:", e.getMessage());
    }

    String[] cities = allWords.split(" ");
    for (String oneWord : words) {
        App.getDBManager().inputDBFeed(new Word(oneWord, getFirstLetter(oneWord)));
    }

}

但在设备上运行此过程需要 2 到 5 分钟。请给我一种尽可能加快速度的方法。

最佳答案

  1. 分析您的代码,看看时间真正花在哪里以及任何更改是否真正有帮助。

  2. 将数百个插入包含在一个数据库事务中,以避免每次插入时等待磁盘 I/O。

  3. 使用准备好的 SQL 语句以避免一遍又一遍地重新编译相同的 SQL。

  4. 不要在每次迭代时将 StringBuilder 转换为字符串 - 您仅在循环之后需要该值。

  5. 可能还有其他一些微观优化,例如尽可能避免分配和缓存值。

关于java - 如何在 Android 中加速从 .txt 解析数据并写入 SQLite?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23313520/

相关文章:

java - Hibernate 映射已被删除,但表中的行未被删除

java - 打印数组中的字符串而不打印 null,Java

android - 从 Android 上的 Axis 相机获取 rtsp 流

ios - 在 ios 上的 SQLite 数据库中查找条目

java - 调整大小后如何使用 LWJGL3 将 LibGDX 中的窗口居中

java - 带有 double 值的特定数值的字符串replaceAll

c# - 等待 MoveTo 操作完成的正确方法是什么?

java - Heroku/Auth0 Android + JAVA API 错误

python - 是否有标准方法可以在 python 应用程序之外存储数据库模式

Python SQL 更新语法问题