-1

これは、私の 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(?, ?, ?, ?, ?, ?, ?, ?, ?);
4

1 に答える 1

1

私にはすべて問題ないように見えるので、実際には列を持たない古いバージョンのデータベースを使用していると推測できますlowerbody_filter。開発の早い段階でその列を使用せずにテーブルを作成し、スキーマのバージョン番号と を正しく設定していないSQLiteOpenHelper.onUpgrade()場合は、古いバージョンを引き続き使用することになります。この場合は、クイック アンインストール/再インストールで表示されるはずです。その場合、解決策は、スキーマを変更するたびにスキーマのバージョン番号を常に増やし、SQLiteOpenHelper.onUpgrade()必要に応じてデータベースが常にアップグレードされるように、または他の手段を使用することです。

于 2012-06-01T03:05:40.500 に答える