SQLite syntax error near “CREATE TABLE”

后端 未结 3 792
你的背包
你的背包 2021-01-23 06:40

Here\'s my code:

    String CREATE_DATABASE = \"CREATE TABLE \" + TABLE_NAME + \"(\"  + 
            KEY_ID + \" INTEGER PRIMARY KEY AUTOINCREMENT, \" + 
                


        
相关标签:
3条回答
  • 2021-01-23 06:48

    Try this code in your onCreate method.

    1. Remove AUTOINCREMENT for KEY_ID as it is already declared as Primary KEY.
    2. Remove ";" you placed just after the last bracket in string i.e. second last semicolon in string CREATE_DATABASE.
    3. Remove db.close() from oncreate()

    Code To Replace: String CREATE_DATABASE = "CREATE TABLE "+TABLE_NAME+ " ( "+KEY_ID+" INTEGER PRIMARY KEY, "+KEY_TITLE+"TEXT, "+KEY_AUTHOR+"TEXT, "+KEY_STATE+"TEXT )"; db.execSQL(CREATE_DATABASE);

    0 讨论(0)
  • 2021-01-23 07:02

    In SQLite, a column declared integer primary key will auto increment, so try removing that:

    String CREATE_DATABASE = "CREATE TABLE " + TABLE_NAME + "("  + 
            KEY_ID + " INTEGER PRIMARY KEY, " + 
            "title TEXT, "+
            "author TEXT, "+
            "state TEXT);";
    

    See this answer for reference.

    0 讨论(0)
  • 2021-01-23 07:10

    The CREATE TABLE syntax is all right as you've posted it.

    I suspect there's a non-breaking space (ASCII 0xA0) between CREATE and TABLE. Replace it with the regular space (ASCII 0x20). That would explain the syntax error you posted: parser is treating CREATE TABLE as a single unknown token and not as two separate known tokens CREATE and TABLE.

    What is definitely wrong is that you call db.close() on the SQLiteDatabase db passed in as a parameter to your function. You should only close databases you opened yourself and closing it this way will lead to an exception, albeit a different one.

    0 讨论(0)
提交回复
热议问题