2013-05-04 2 views
1

저는 데이터베이스가 매우 새롭습니다.android.database.sqlite.SQLiteException : 구문 오류 : ALTER TABLE 데이터 추가 열 0 정수

테이블에 열을 추가하려고하는데 "94169"까지 "0", "1", "2"등의 열을 추가해야합니다.

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,000 개의 열을 추가하나요? – tolgap

+1

@tolgap 나쁜 생각, 실제로 94000이 허용되는 최대 cols를 초과 함 :-) –

답변

4

법률 문자를

지 않은 식별자 수 시스템 기본 문자 세트의 영숫자 문자로 구성됩니다. (utf8), '_'및 '$'문자가 포함됩니다. 식별자는 숫자를 포함하여 식별자에서 합법적 인 문자로 시작할 수 있습니다.

그러나 식별자는 번호와 구별 할 수 없으므로 완전히 숫자로 구성 될 수 없습니다. 숫자로 시작하는 식별자에 대한 MySQL의 지원은 데이터베이스 시스템에서 다소 특이합니다. 이러한 식별자를 사용하는 경우 'E'또는 'e'가 포함되어 있으면 해당 문자가 모호한 표현으로 이어질 수 있으므로 특히주의해야합니다. 예를 들어, 23e + 14라는 표현은 23e와 14를 의미하지만 23e + 14는 무엇을 의미합니까? 똑같은 것을 의미합니까, 아니면 과학 표기법의 숫자입니까? 16 진수로 해석 될 수 있기 때문에 0x로 시작하는 0x1020과 같은 식별자를 사용할 때주의해야합니다.

참조 : 94170 열이 허용되는 최대 열 수를 초과하기 때문에http://www.informit.com/articles/article.aspx?p=377068

이 친절 데이터베이스 설계를 수정하는 것이 좋습니다. 확인 SQLITE Limits

+1

견적 인 경우 견적을 제출하십시오. 그렇지 않으면, 당신 말이 맞아. –

관련 문제