2013-05-04 76 views
1

我對數據庫非常陌生。android.database.sqlite.SQLiteException:接近「0」:語法錯誤:ALTER TABLE數據ADD COLUMN 0 INTEGER

我想添加列到一個表中,我需要添加名爲「0」,「1」,「2」等列,直到「94169」。

我收到以下錯誤:

05-04 10:12:50.656: E/An droidRuntime(2022): FATAL EXCEPTION: main 
05-04 10:12:50.656: E/AndroidRuntime(2022): java.lang.RuntimeException: Unable to start  activity ComponentInfo{com.example.koday/com.example.koday.MainActivity}:  android.database.sqlite.SQLiteException: near "0": syntax error: ALTER TABLE data ADD  COLUMN 0 INTEGER 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at  android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at  android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at android.os.Handler.dispatchMessage(Handler.java:99) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at android.os.Looper.loop(Looper.java:130) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at android.app.ActivityThread.main(ActivityThread.java:3683) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at java.lang.reflect.Method.invokeNative(Native Method) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at java.lang.reflect.Method.invoke(Method.java:507) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at dalvik.system.NativeStart.main(Native Method) 
05-04 10:12:50.656: E/AndroidRuntime(2022): Caused by: android.database.sqlite.SQLiteException: near "0": syntax error: ALTER TABLE data ADD COLUMN 0 INTEGER 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at android.database.sqlite.SQLiteDatabase.native_execSQL(Native Method) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1763) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at com.example.koday.DataBaseHelper.aggiungi(DataBaseHelper.java:186) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at com.example.koday.MainActivity.onCreate(MainActivity.java:61) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
05-04 10:12:50.656: E/AndroidRuntime(2022):  ... 11 more 

這是代碼導致錯誤的片段:在標識符

public void aggiungi() { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    for (int i = 0; i < 94170; i++) { 
    db.execSQL("ALTER TABLE data ADD COLUMN " +Integer.toString(i)+" INTEGER"); 
    } 
    db.close(); 
    return; 

} 
+1

爲什麼你要在你的桌子上增加94列? – tolgap 2013-05-04 10:32:17

+1

@tolgap確實不好的主意,此外94000超過允許的最大列數:-) – 2013-05-04 10:51:49

回答

4

合法字符

未加引號的標識符能由系統默認字符集中的任何字母數字字符組成(utf8),加上字符'_'和'$'。標識符可以以任何在標識符中合法的字符開頭,包括數字。

但是,標識符不能完全由數字組成,因爲這會使其與數字無法區分。 MySQL對數字開頭的標識符的支持在數據庫系統中有些不尋常。如果您使用這樣的標識符,如果它包含'E'或'e',請特別小心,因爲這些字符可能會導致模糊的表達。例如,表達式23e + 14(圍繞'+'符號的空格)意味着列23e加上數字14,但是23e + 14怎麼辦?這是否意味着相同的事情,還是科學記數法中的數字?您還應該小心使用以0x開頭的標識符(如0x1020),因爲它們可能被解釋爲十六進制常量。

參考:http://www.informit.com/articles/article.aspx?p=377068

請考慮修改你的數據庫設計,因爲94170列超過允許的最大列數。檢查SQLITE Limits

+1

如果是報價,請將其作爲報價。否則,你是對的。 – 2013-05-04 10:34:31

相關問題