我正在移植适用于Android操作系统的iOS代码。我执行一堆查询,将查询结果插入临时表。当所有查询完成后,我将临时表中的所有结果都捕获到我自己创建的对象集合中。我正在使用临时表,而不是直接选择集合,因为我相信它执行得更快,或者至少在iOS端执行。我的问题是execSQL()没有像我期望的那样工作,这是代码:
db.execSQL("CREATE TEMPORARY TABLE SearchResults(Name text);");
db.execSQL("INSERT INTO SearchResults (Name) SELECT Name FROM ProductNames WHERE NameLower MATCH '" + termLowerCase + "*';");
db.execSQL("INSERT INTO SearchResults (Name) SELECT Name FROM BrandNames WHERE NameLower MATCH '" + termLowerCase + "*';");
当我执行这段代码时,我只能从INSERT的第一次execSQL()调用中获得一行。我知道ProductNames表中有多个结果应该与我的术语匹配,我知道BrandNames表中有数百行应该与我的术语相匹配。如果我将代码更改为:
Cursor cursor = db.rawQuery("SELECT Name FROM ProductNames WHERE NameLower MATCH '" + termLowerCase + "*'", null);
cursor.moveToFirst();
while (!cursor.isAfterLast())
{
resultSet.add(cursor.getString(0));
cursor.moveToNext();
}
cursor.close();
cursor = db.rawQuery("SELECT Name FROM BrandNames WHERE NameLower MATCH '" + termLowerCase + "*'", null);
cursor.moveToFirst();
while (!cursor.isAfterLast())
{
resultSet.add(cursor.getString(0));
cursor.moveToNext();
}
我得到了我期待的所有结果。
有谁能告诉我我做错了什么?我是否以不恰当的方式使用execSQL()?我假设它只是将查询传递给我在iOS上使用的sqlite3_exec()。如果我不恰当地使用execSQL()有什么限制,什么是我想做的最快的替代方案?非常感谢您的帮助!