我正在移植适用于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 + "*';");
Run Code Online (Sandbox Code Playgroud)
当我执行这段代码时,我只从第一次使用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();
}
Run Code Online (Sandbox Code Playgroud)
我得到了我期待的所有结果.
谁能告诉我我做错了什么?我是否以不恰当的方式使用execSQL()?我假设它只是将查询传递给我在iOS上使用的sqlite3_exec().如果我不恰当地使用execSQL()有什么限制,什么是我想做的最快的替代方案?非常感谢您的帮助!
| 归档时间: |
|
| 查看次数: |
2696 次 |
| 最近记录: |