java - 获取 SQLite 单列结果列表的快速方法

标签 java android database sqlite android-sqlite

我的 SQLite 数据库中有带有附加列的单词列表。我只想获取单词列表(基本上是单列)。下面是我如何做的代码。

Cursor c = db.rawQuery("select word from wordlist", null);
            if (c.moveToFirst()) {
                do {
                    words.add(c.getString(c.getColumnIndex("word")));
                } while (c.moveToNext());
            }
            c.close();

它可以工作,但速度很慢。例如,对于大约 100K 单词,需要接近 1 秒。但是,如果我只有文本文件中的单词列表,则可以在大约 100 毫秒内读取它。

是否有任何方法可以将 SQLite DB 中的单列直接读取到列表中,而不是获取游标并迭代它以获取所有值?如果不是,更好的解决方案是什么?只需返回文本文件即可?

最佳答案

我没有性能问题,所以我懒得尝试这个,但是这样的东西表现如何?这个想法是确保缓冲区 (CursorWindow) 得到充分利用,然后直接从该缓冲区读取,而不是让光标进行中介。 CursorWindow 甚至有一个构造函数,允许您覆盖默认缓冲区大小(如果您想尝试一下的话)。

我相当有信心,这与 android 所能提供的最接近 sqlite 的性能一样,因此,如果这样的方法不能改善情况,您必须 bundle 自己的 sqlite 或使用不同的存储机制。

try(Cursor c = db.rawQuery("select word from wordlist", null))
{
    c.setFillWindowForwardOnly(true);
    CursorWindow window = new CursorWindow("nameForDebugging");
    c.setWindow(window);
    if (c.moveToFirst())
    {
        int index = 0;
        do
        {
            int count = window.getNumRows();
            for(int x = 0; x < count; ++x)
                words.add(window.getString(index++, 0));
        } while((count != 0) && c.moveToPosition(index));
    }
}

关于java - 获取 SQLite 单列结果列表的快速方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58115340/

相关文章:

java - 如何正确格式化 ActionEvent 以便 JButton 正常工作

android - runnable 中的 handler.postDelayed 在 Kotlin 中显示语法错误 - Android

android - 无法在双向模式下绑定(bind) MvxBindableListView

c# - 检查重复项时如何返回列?

java - 如何使用 iText 将 PDF 文件附加到现有文件?

java - 将 android XML 链接到 Java 类?

java - 如何使用 for 简化逻辑检查数组记录中的所有单元格是否为空

java - 如何使用语音搜索打开相机?

php - 向mysql插入数据,只插入第一个日期

c# - 使用所有备份集通过 SMO 恢复数据库