SQLiteDatabase.execSQL无法正常工作INSERT INTO查询

时间:2012-01-26 14:48:29

标签: android sqlite

我正在移植适用于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()有什么限制,什么是我想做的最快的替代方案?非常感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

根据SQLiteDatabase文档,在这种情况下您无法使用execSQL。尝试使用rawQuery执行该语句。