2

だから私は名前、カロリー、タンパク質の列を持つデータベースを作ろうとしています。createステートメントは次のとおりです。

public class SQLHelp extends SQLiteOpenHelper{
    static final String DATABASE_NAME = "Food.db";
    static final String TABLE_FOOD = "food";
    static final String NAME_COLUMN = "FoodName";
    static final String CALORIE_COLUMN = "Calorie";
    static final String PROTEIN_COLUMN = "Protein";
    static final String FAT_COLUMN = "Fat";
    static final String COLUMN_ID = "id";

    public SQLHelp(Context c){
        super(c, DATABASE_NAME, null, 1);
    }

    public void onCreate(SQLiteDatabase db){
        String makeTable = "CREATE TABLE " + TABLE_FOOD + "("
                + NAME_COLUMN + " TEXT," + CALORIE_COLUMN + " INTEGER,"
                + PROTEIN_COLUMN + " INTEGER" + ")";
        db.execSQL(makeTable);      
    }

値は、次の方法でデータベースに追加されます。

public void createFood(Food f) {
    ContentValues values = new ContentValues();
    values.put(SQLHelp.CALORIE_COLUMN, f.getCalories());
    values.put(SQLHelp.PROTEIN_COLUMN, f.getProtein());
    values.put(SQLHelp.NAME_COLUMN, f.getName());
    database.insert(SQLHelp.TABLE_FOOD, null,
            values);
}

追加しようとすると、LogCatはProtein列が存在しないことを示すSQLiteExceptionを表示します。さらに奇妙なことに、コメントアウトされたタンパク質行を使用してコードを実行すると、すべてが正常に機能します。

ありがとう!

4

1 に答える 1

3

DB ヘルパーは、バージョン番号を更新したときにのみデータベースを更新します。これらの列を含まないバージョン #1 DB を実行しています。

バージョンを 2 に変更すると、新しく追加した列が反映されます

 public SQLHelp(Context c){
        super(c, DATABASE_NAME, null, 2); //note the 2 here
    }
于 2012-09-07T02:00:49.350 に答える