简体   繁体   English

SQLite插入错误(Android)

[英]SQLite insert into error (Android)

Error 错误

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);

I keep getting this error when trying to add a new athlete to my database. 尝试向数据库中添加新运动员时,我一直收到此错误。 Could someone please figure out what I am doing wrong. 有人可以找出我在做什么错。 I am almost certain all of my sql statements are correct. 我几乎可以肯定我的所有sql语句都是正确的。 I think it thinks that it is creating a new column under events for whatever is from the athlete object but I don't know 我认为它认为是在事件下为运动员对象创建的新列,但我不知道

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();
}

You should surround the string values you insert with single quotes. 您应该用单引号将插入的字符串值括起来。 The exception is thrown because you have whitespace in your literal "Discus Throw". 因为在文字“ Discus Throw”中有空格,所以引发了异常。 Try the following: 请尝试以下操作:

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() + ");");

which gives you 这给你

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

Surround each entry of type TEXT in VALUES with single quotes. VALUES中用单引号括VALUES TEXT类型的每个条目。

For example, 例如,

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

Or, written out: 或者,写出:

" VALUES ('Bob')"

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM