2014-04-09 141 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中的保留字。重新命名该列或在` `反引号中引用它。