这个Android sqlite插件有什么问题?

时间:2012-06-01 02:51:19

标签: android database sqlite initialization

这是我在Dbadatper的oncreate方法中创建的表

String CREATE_EXERCISES_TABLE = "CREATE TABLE IF NOT EXISTS " + TABLE_EXERCISES+"("
        + KEY_ROWID + " INTEGER PRIMARY KEY, " 
        + KEY_EXER_NAME + " TEXT, "
        + KEY_DEFAULTMANWEIGHT + " INTEGER, "
        + KEY_DEFAULTWOMANWEIGHT + " INTEGER, "
        + KEY_WEIGHTS_FILT + " INTEGER, "
        + KEY_OLYMPIC_FILT + " INTEGER, "
        + KEY_EQUIPNEED_FILT + " INTEGER, "
        + KEY_UPPERBODY_FILT + " INTEGER, "
        + KEY_LOWERBODY_FILT + " INTEGER, "
        + KEY_LARGEAREA_FILT + " INTEGER);";
db.execSQL(CREATE_EXERCISES_TABLE);

这是我插入练习的插入代码

public void addExercise(Exercise exer) {
    SQLiteDatabase db = this.open();

    ContentValues values = new ContentValues();
    values.put(KEY_EXER_NAME, exer.getName()); 
    values.put(KEY_DEFAULTMANWEIGHT, exer.getDefaultManWeight());
    values.put(KEY_DEFAULTWOMANWEIGHT, exer.getDefaultWomanWeight());
    values.put(KEY_WEIGHTS_FILT, exer.getWeightFilt());
    values.put(KEY_OLYMPIC_FILT, exer.getOlympicFilt()); 
    values.put(KEY_EQUIPNEED_FILT, exer.getEquipFilt()); 
    values.put(KEY_UPPERBODY_FILT, exer.getUpperBodyFilt()); 
    values.put(KEY_LOWERBODY_FILT, exer.getLowerBodyFilt()); 
    values.put(KEY_LARGEAREA_FILT, exer.getLargeAreaFilt()); 

    // Inserting Row
    db.insert(TABLE_EXERCISES, null, values);
    db.close(); // Closing database connection
}

这是我的实际插入

ExerTable db= new ExerTable(ctx);
Exercise pushups =new Exercise("Pushups",0,0,0,0,0,1,0,1);
db.addExercise(pushups);

我被困在这一段时间,每当我尝试运行时我都会收到此错误

05-31 19:33:27.107: ERROR/Database(413): Error inserting upperbody_filter=1 olympic_filter=0 default_man_weight=0 default_woman_weight=0 weights_filter=0 lowerbody_filter=0 exername=Pullups large_area_filter=1 equipment_need_filter=1

05-31 19:33:27.107: ERROR/Database(413): android.database.sqlite.SQLiteException: table Exercises has no column named lowerbody_filter: , while compiling: INSERT INTO Exercises(upperbody_filter, olympic_filter, default_man_weight, default_woman_weight, weights_filter, lowerbody_filter, exername, large_area_filter, equipment_need_filter) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?);

1 个答案:

答案 0 :(得分:1)

一切看起来都不错,所以我最好的猜测是你使用的是旧版本的数据库,实际上没有lowerbody_filter列。如果您在开发时早期创建了没有该列的表,并且没有使用架构版本号和SQLiteOpenHelper.onUpgrade()正确设置,那么您仍将使用旧版本。如果是这种情况,应该快速卸载/重新安装。如果是这样,那么您的解决方案是确保每次更改架构时始终增加架构版本号,并使用SQLiteOpenHelper.onUpgrade()或其他方法确保在必要时始终升级数据库。

相关问题