2014-04-09 197 views
0

我想添加一個新的列到我的sqlite數據庫。我以前添加了一個額外的列(電子郵件),並沒有任何問題。以下是我的創建DbHelper類。SQLite數據庫創建錯誤 - Android

public class DbHelper extends SQLiteOpenHelper { 
public static String DATABASE_NAME="userdata"; 
public static final String TABLE_NAME="user"; 
public static final String KEY_FNAME="fname"; 
public static final String KEY_LNAME="lname"; 
public static final String KEY_EMAIL="email"; 
public static final String KEY_CHECK="check"; 
public static final String KEY_ID="id"; 
public DbHelper(Context context) { 
    super(context, DATABASE_NAME, null, 1); 

} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_TABLE="CREATE TABLE " +TABLE_NAME+" ("+KEY_ID+" INTEGER PRIMARY KEY, "+KEY_FNAME+" TEXT, "+KEY_LNAME+" TEXT, "+KEY_CHECK+" TEXT)"; 
    db.execSQL(CREATE_TABLE); 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS "+TABLE_NAME); 
    onCreate(db); 

} 

} 

當數據庫中創建它是從我的mainactivity顯示:

private void displayData() { 
    dataBase = mHelper.getWritableDatabase(); 
    Cursor mCursor = dataBase.rawQuery("SELECT * FROM " 
      + DbHelper.TABLE_NAME, null); 

    userId.clear(); 
    user_fName.clear(); 
    user_lName.clear(); 
    user_eMail.clear(); 
    user_cHeck.clear(); 
    if (mCursor.moveToFirst()) { 
     do { 
      userId.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_ID))); 
      user_fName.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_FNAME))); 
      user_lName.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_LNAME))); 
      user_eMail.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_EMAIL))); 
      user_cHeck.add(mCursor.getString(mCursor.getColumnIndex(DbHelper.KEY_CHECK))); 

     } while (mCursor.moveToNext()); 
    } 
    DisplayAdapter disadpt = new DisplayAdapter(getActivity(),userId, user_fName, user_lName, user_eMail, user_cHeck); 
    userList.setAdapter(disadpt); 
    mCursor.close(); 
} 
{ 

} 

在創造我收到以下錯誤:

04-09 15:33:16.740: E/SQLiteLog(19806): (1) near "TEXT": syntax error 
04-09 15:33:16.755: W/dalvikvm(19806): threadid=1: thread exiting with uncaught exception (group=0x40df4a08) 
04-09 15:33:16.765: E/AndroidRuntime(19806): FATAL EXCEPTION: main 
04-09 15:33:16.765: E/AndroidRuntime(19806): android.database.sqlite.SQLiteException: near "TEXT": syntax error (code 1): , while compiling: CREATE TABLE user (id INTEGER PRIMARY KEY, fname TEXT, lname TEXT, check TEXT) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:909) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:520) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.database.sqlite.SQLiteStatement.<init>(SQLiteStatement.java:31) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.database.sqlite.SQLiteDatabase.executeSql(SQLiteDatabase.java:1719) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.database.sqlite.SQLiteDatabase.execSQL(SQLiteDatabase.java:1650) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at app.norman.tennis.fours.DbHelper.onCreate(DbHelper.java:23) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.database.sqlite.SQLiteOpenHelper.getDatabaseLocked(SQLiteOpenHelper.java:252) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.database.sqlite.SQLiteOpenHelper.getWritableDatabase(SQLiteOpenHelper.java:164) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at app.norman.tennis.FoursFragment.displayData(FoursFragment.java:244) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at app.norman.tennis.FoursFragment.onResume(FoursFragment.java:235) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.app.Fragment.performResume(Fragment.java:1828) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:921) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1059) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.app.BackStackRecord.run(BackStackRecord.java:682) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1437) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.os.Handler.handleCallback(Handler.java:725) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.os.Looper.loop(Looper.java:158) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at android.app.ActivityThread.main(ActivityThread.java:5751) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at java.lang.reflect.Method.invokeNative(Native Method) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at java.lang.reflect.Method.invoke(Method.java:511) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1083) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:850) 
04-09 15:33:16.765: E/AndroidRuntime(19806): at dalvik.system.NativeStart.main(Native Method) 

誰能告訴我爲什麼我有這個問題。提前致謝。

回答

1

CHECK是SQLite中的保留字。請爲此欄選擇一個不同的名稱。當創建其他語句時,它也會爲您節省很多的麻煩。

link

+0

這麼簡單的東西可以驅動一個人如此瘋狂。感謝您的幫助。 – RunningWalks

+0

沒有開玩笑。我曾經花了幾個小時的時間來調試,以便在SQL字符串中找到錯位的字符。發生在我們所有人身上。 – Karakuri

1

check是SQL中的保留字。重新命名該列或在` `反引號中引用它。