Я портирую код iOS, который отлично работает на ОС Android.Я выполняю кучу запросов, вставляя результаты запросов во временную таблицу.Когда все запросы завершены, я собираю все результаты из временной таблицы в коллекцию объектов моего собственного создания.Я использую временную таблицу, а не выбираю прямо в коллекцию, потому что считаю, что она выполняется быстрее или, по крайней мере, на 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 + "*';");
Когда я выполняю этот код, я всегда получаю только одну строку из первого вызова execSQL () с INSERT,Я знаю, что в таблице 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 () ненадлежащим образом?Я предполагал, что он просто передаст запрос к sqlite3_exec (), который я использую на iOS.Если я неправильно использую execSQL (), каковы его ограничения и какова самая быстрая альтернатива тому, что я хочу сделать?Большое спасибо за любую помощь!