2

我有一个场景,“如果不存在,则使用 fts4(_id 文本,desc 文本)创建虚拟表搜索内容”崩溃:在“NOT”附近:语法错误:,编译时:如果不存在则创建虚拟表

这只发生在运行 4.0.2 的 Galaxy Nexus 手机上。当我在运行 4.1.2 的 Galaxy Note 2 上尝试时,一切正常。如果我再次删除“如果不存在”,它将在 nexus 手机上运行。有谁知道错误是什么?是安卓版本问题吗?

在我的 sqlitehelper 类中:

public static final String SearchContentTable_DATABASE_CREATE = "CREATE VIRTUAL TABLE IF NOT EXISTS " + TABLE_NAME + " USING fts4 ( " + 
        COLUMN_ID + " " + "TEXT" + " , " + 
        COLUMN_TITLE + " " + "TEXT" + " , " + 
        COLUMN_DESCRIPTION + " " + "TEXT" + " , " + 
        COLUMN_KEYWORDS + " " + "TEXT" + " , " + 
        COLUMN_TYPE + " " + "TEXT" + " );";

@Override
public void onCreate( SQLiteDatabase database )
{
   .
   .
   .
    database.execSQL( SearchContentTable_DATABASE_CREATE );
   .
   .
   .
}
4

1 回答 1

2

“IF NOT EXISTS”语句在某些版本的 Android 中不起作用,特别是 4.0.x 版本。至少在创建虚拟表时。它在 4.0.4 和 4.0.3 版本中多次使我发布的应用程序之一崩溃。我的应用程序在 4+ 版本中可以正常工作,但只要在这些特定版本中使用 DB 就会崩溃。

事实上,您不需要“IF NOT EXISTS”语句,因为您在 SQLiteOpenHelper 实现中正确使用了 onCreate 和 onUpgrade 函数。我使用它只是为了预防和避免开发过程中出现问题。

于 2013-11-26T07:31:36.687 回答