簡體   English   中英

SQLite插入錯誤(Android)

[英]SQLite insert into error (Android)

錯誤

12-22 14:30:52.329    1261-1261/com.TrackApp.trackapp E/SQLiteLog﹕ (1) near "Throw": syntax error
12-22 14:30:52.329    1261-1261/com.TrackApp.trackapp D/AndroidRuntime﹕ Shutting down VM
12-22 14:30:52.339    1261-1261/com.TrackApp.trackapp W/dalvikvm﹕ threadid=1: thread exiting  with uncaught exception (group=0x40a13300)
12-22 14:30:52.389    1261-1261/com.TrackApp.trackapp E/AndroidRuntime﹕ FATAL EXCEPTION: main
android.database.sqlite.SQLiteException: near "Throw": syntax error (code 1): , while compiling:    INSERT INTO Athletes (ID, First_Name, Last_Name, Age, Gender, Event, Tier) VALUES (0, Joe,  Richards, 20, Male, Discus Throw, 2);

嘗試向數據庫中添加新運動員時,我一直收到此錯誤。 有人可以找出我在做什么錯。 我幾乎可以肯定我的所有sql語句都是正確的。 我認為它認為是在事件下為運動員對象創建的新列,但我不知道

private static final String DATABASE_NAME = "AthletesDB";
private static final int VERSION = 1;

private static final String TABLE_NAME = "Athletes";
private static final String COLUMN_ID = "ID";
private static final String COLUMN_FIRST_NAME = "First_Name";
private static final String COLUMN_LAST_NAME = "Last_Name";
private static final String COLUMN_AGE = "Age";
private static final String COLUMN_GENDER = "Gender";
private static final String COLUMN_EVENT = "Event";

private static final String COLUMN_TIER = "Tier";
private static final String[] COLUMNS = {"ID", "First_Name", "Last_Name", "Age", "Gender", "Event", "Tier"};

private static final String TABLE_CREATE = "CREATE TABLE " + TABLE_NAME + "( " + COLUMN_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, "
        + COLUMN_FIRST_NAME + " VARCHAR(20), " + COLUMN_LAST_NAME + " VARCHAR(20), " + COLUMN_AGE + " INTEGER, " +
        COLUMN_GENDER + " VARCHAR(20), " + COLUMN_EVENT + " VARCHAR(20), " + COLUMN_TIER + " INTEGER " + ")";

public MySQLiteHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
    super(context, DATABASE_NAME, null, VERSION);
}

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

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CREATE);
    onCreate(db);
}
public void addAthlete(Athlete athlete){
    SQLiteDatabase db = this.getWritableDatabase();

    /*ContentValues contentValues = new ContentValues();
    contentValues.put(COLUMN_ID, athlete.getID());
    contentValues.put(COLUMN_FIRST_NAME, athlete.getFirstName());
    contentValues.put(COLUMN_LAST_NAME, athlete.getLastName());
    contentValues.put(COLUMN_AGE, athlete.getAge());
    contentValues.put(COLUMN_GENDER, athlete.getGender());
    contentValues.put(COLUMN_EVENT, athlete.getEvent());
    contentValues.put(COLUMN_TIER, athlete.getTier());*/

    // db.insert(TABLE_NAME, null, contentValues);

    db.execSQL("INSERT INTO " + TABLE_NAME + " (" + COLUMN_ID + ", " + COLUMN_FIRST_NAME + ", " + COLUMN_LAST_NAME
    + ", " + COLUMN_AGE + ", " + COLUMN_GENDER + ", " + COLUMN_EVENT + ", " + COLUMN_TIER + ")" +
    " VALUES " + "(" + athlete.getID() + ", " + athlete.getFirstName()
    + ", " + athlete.getLastName() + ", " + athlete.getAge() + ", " + athlete.getGender() + ", " +
    athlete.getEvent() + ", " + athlete.getTier() + ");");
    db.close();
}

您應該用單引號將插入的字符串值括起來。 因為在文字“ Discus Throw”中有空格,所以引發了異常。 請嘗試以下操作:

db.execSQL("INSERT INTO " 
            + TABLE_NAME + " (" 
                + COLUMN_ID + ", " 
                + COLUMN_FIRST_NAME + ", " 
                + COLUMN_LAST_NAME + ", " 
                + COLUMN_AGE + ", " 
                + COLUMN_GENDER + ", " 
                + COLUMN_EVENT + ", " 
                + COLUMN_TIER + ")" +
            " VALUES " + "(" 
                + athlete.getID() + ", " 
                + athlete.getFirstName() + ", " 
                + athlete.getLastName() + ", " 
                + athlete.getAge() + ", " 
                + athlete.getGender() + ", " 
                + "'" + athlete.getEvent() + "'" + ", " 
                + athlete.getTier() + ");");

這給你

INSERT INTO Athletes (ID, First_Name, Last_Name, Age, Gender, Event, Tier) 
    VALUES (0, Joe,  Richards, 20, Male, 'Discus Throw', 2);

VALUES中用單引號括VALUES TEXT類型的每個條目。

例如,

" VALUES ('" + athlete.getFirstName() + "')"

或者,寫出:

" VALUES ('Bob')"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM