我在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();
它有效,但是速度慢。例如,大约10万个单词需要大约1秒钟的时间。但是,如果我只有文本文件中的单词列表,则可以在大约100毫秒内读取它。
有什么方法可以将SQLite DB中的单列直接读取到列表中,而不是获取游标并对其进行迭代以获取所有值吗?如果没有,什么是更好的解决方案?只需返回文本文件即可?
答案 0 :(得分:0)
我没有性能问题,所以我不愿意尝试这样做,但是这样的事情表现如何?这个想法是确保缓冲区(CursorWindow
)被充分利用,然后直接从该缓冲区中读取而不是让游标进行中介。 CursorWindow
甚至有一个构造函数,允许您覆盖默认缓冲区大小,以防您愿意尝试使用它。
我非常有信心,这与android将使您获得的sqlite一样近,因此,如果类似这样的操作不能改善问题,则您必须捆绑自己的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));
}
}