“NOT”附近:语法错误:,编译时:创建虚拟表,如果不是EXISTS

时间:2013-11-07 23:48:35

标签: android sqlite

我有一个场景,“如果不存在使用fts4创建虚拟表searchcontent(_id text,desc text)”正在崩溃: “NOT”附近:语法错误:,编译时:CREATE VIRTUAL TABLE IF NOT NOT EXISTS

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

在我的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 );
   .
   .
   .
}

1 个答案:

答案 0 :(得分:2)

“IF NOT EXISTS”语句在某些Android版本中无效,特别是4.0.x版本。至少在创建虚拟表时。它在版本4.0.4和4.0.3中多次崩溃了我发布的一个应用程序。 我的应用程序在4+版本中正常运行,但只有在这些特定版本中使用DB时才会崩溃。

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