2012-06-27 110 views
0

我創建了一個數據庫並在其上創建了一些表。但是在某些時候,我做錯了,所以應用程序崩潰onStart。下面是我的一些代碼部分:SQLite插入錯誤開始

private SQLiteStatement insertUserInfos; 
private static final String TN_INFO = "UserInfos"; 

private static final String CREATE_TABLE_INFO = "CREATE TABLE " 
     + TN_INFO 
     + " (\"name\" TEXT, \"surname\" TEXT, \"mail\" TEXT, \"password\" TEXT, \"birthyear\" TEXT, \"currentcity\" TEXT, \"futurecity\" TEXT, \"check\" TEXT) "; 

private static final String INSERT_INFOS = "INSERT INTO " 
     + TN_INFO 
     + " (name, surname, mail, password, birthyear, currentcity, futurecity, check) Values (?,?,?,?,?,?,?,?) "; 

public DBHelper(Context context) { 
    this.ctx = context; 

    DBOpenHelper db = new DBOpenHelper(ctx); 
    database = db.getWritableDatabase(); 

    insertUserInfos = database.compileStatement(INSERT_INFOS); 
} 

private class DBOpenHelper extends SQLiteOpenHelper { 

    public DBOpenHelper(Context context) { 
     super(ctx, DATABASE_NAME, null, DATABASE_VERSION); 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     db.execSQL(CREATE_TABLE_INFO); 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    } 

} 

而且我得到這個錯誤:

06-27 22:42:01.870:E/AndroidRuntime(16550):android.database.sqlite:致.SQLiteException:接近「check」:語法錯誤:,編譯時:INSERT INTO UserInfos(姓名,郵件,密碼,birthyear,currentcity,futurecity,check)值(?,?,?,?,?,?,? ,?)

我檢查了一堆,但我看不到這條線上的任何錯誤。任何幫助都會很好。

+1

這可能是(我不是正面的),因爲你的一些列名是SQLIte中的保留關鍵字(在這裏列出:http://www.sqlite.org/lang_keywords.html)。嘗試在INSERT INTO語句的列名稱周圍放置方括號[]或雙引號「」。 – AkiAki007

+0

地獄是啊! =)非常感謝。我只是忽略了「CHECK」是一個關鍵字=)簡而言之,我已將該詞改爲「checkFlag」,因此它不再是關鍵字,問題就解決了! =) – yahya

+0

順便說一句,在製作你的SQL字符串時一般使用引號。這不是必需的。 – RvdK

回答

1

檢查是保留字,您必須引用它。當你在你的create語句中做這件事時,你會在你的insert語句中忘記它。

+0

作爲@AkiAki007,你是對的=)謝謝。 – yahya