动态表中的初始化外键

时间:2014-10-19 07:18:47

标签: java android mysql database foreign-keys

。我开始写饮食计划项目,这是我的数据库表。我使用外部数据库并在那里定义表外键并将其复制到资产文件夹中,然后将其连接到我的项目。 standardUnit,Foods和standardFoodUnit是3个表,它们都有静态数据,之前我填充过它们,但EatenFood表在计算后动态填充。  我使用模型类并尝试使用androidhive database tutorial指令编写databaseAdapter。但是因为我最近启动了android,所以我对它没有任何看法。 尝试阅读书籍或在线教程,但他们混淆了我更多。现在这是我的问题,我想知道EatenFood表的外键如何才能输入food-id值?我之前在数据库中定义了food_id INTEGER REFERENCES Foods ( _id )但是在databaseAdapter类中用于插入或更新或获取函数我没有'知道如何用这个外键来表现。

enter image description here

这是EatenFood表的模型类

public class EatenFood {

int eatenfoodid;
boolean breakfast;
boolean lunch;
boolean snack;
boolean appetizers;
boolean dinner;
Data day;
String equivalent;
boolean dairy;
boolean vegetables;
boolean fruit;
boolean meat_bean_egg;
boolean bread_cereals;
boolean fat;
boolean suger;
double unitsum;
int food_id;

public boolean isAppetizers() {
    return appetizers;
}
public void setAppetizers(boolean appetizers) {
    this.appetizers = appetizers;
}
public Data getDay() {
    return day;
}
public void setDay(Data day) {
    this.day = day;
}
public double getUnitsum() {
    return unitsum;
}
public void setUnitsum(double unitsum) {
    this.unitsum = unitsum;
}
public int getFood_id() {
    return food_id;
}
public void setFood_id(int food_id) {
    this.food_id = food_id;
}
//all remaining getter and setter .........}

食物表的模型类

public class Foods {
int foodid;
String foodname;
boolean breakfast;
boolean lunch;
boolean snack;
boolean appetizers;
boolean dinner;
boolean mainfood;
boolean secondary;


public boolean isAppetizers() {
    return appetizers;
}
public void setAppetizers(boolean appetizers) {
    this.appetizers = appetizers;
}
public int getFoodid() {
    return foodid;
}
public void setFoodid(int foodid) {
    this.foodid = foodid;
}
//all remaining getter and setter .........}

DatabaseAdapter函数

public class DatabaseAdapter {

private final String TAG = "DatabaseAdapter";
private DatabaseOpenHelper openHelper;
public Long insertEatenFood(EatenFood eatenfood) {
    SQLiteDatabase myDataBase = null;
    Long id = -1L;
    try {
        ContentValues values = new ContentValues();
        values.put(TABLE_EATENFOOD_BREAKFAST, eatenfood.isBreakfast());
        values.put(TABLE_EATENFOOD_LUNCH, eatenfood.isLunch());
        values.put(TABLE_EATENFOOD_SNACK, eatenfood.isSnack());
        values.put(TABLE_EATENFOOD_APPETIZERS, eatenfood.isAppetizers());
        values.put(TABLE_EATENFOOD_DINNER, eatenfood.isDinner());
        // values.put(TABLE_EATENFOOD_DATA, eatenfood.getDay().getClass());
        values.put(TABLE_EATENFOOD_EQUIVALENT, eatenfood.getEquivalent());
        values.put(TABLE_EATENFOOD_DAIRY, eatenfood.isDairy());
        values.put(TABLE_EATENFOOD_VEGETABLES, eatenfood.isVegetables());
        values.put(TABLE_EATENFOOD_FRUIT, eatenfood.isFruit());
        values.put(TABLE_EATENFOOD_MEAT_BEAN_EGG,
                eatenfood.isMeat_bean_egg());
        values.put(TABLE_EATENFOOD_BREAD_CEREALS,
                eatenfood.isBread_cereals());
        values.put(TABLE_EATENFOOD_FAT, eatenfood.isFat());
        values.put(TABLE_EATENFOOD_SUGER, eatenfood.isSuger());
        values.put(TABLE_EATENFOOD_UNITSUM, eatenfood.getUnitsum());

        myDataBase = openHelper.getWritableDatabase();
        id = myDataBase.insert(TABLE_EATENFOOD, null, values);

    } catch (Exception e) {
        Log.e(TAG, "Exception: " + e.getMessage());
    } finally {
        if (myDataBase != null && myDataBase.isOpen())
            myDataBase.close();
    }
    return id;
}

// update EateanFood table =====================================================
public int updateEatenFood(EatenFood eatenfood) {
    SQLiteDatabase myDataBase = null;
    int count = -1;
    try {
        myDataBase = openHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(TABLE_EATENFOOD_BREAKFAST, eatenfood.isBreakfast());
        values.put(TABLE_EATENFOOD_LUNCH, eatenfood.isLunch());
        values.put(TABLE_EATENFOOD_SNACK, eatenfood.isSnack());
        values.put(TABLE_EATENFOOD_APPETIZERS, eatenfood.isAppetizers());
        values.put(TABLE_EATENFOOD_DINNER, eatenfood.isDinner());
        // values.put(TABLE_EATENFOOD_DATA, eatenfood.getDay().getClass());
        values.put(TABLE_EATENFOOD_EQUIVALENT, eatenfood.getEquivalent());
        values.put(TABLE_EATENFOOD_DAIRY, eatenfood.isDairy());
        values.put(TABLE_EATENFOOD_VEGETABLES, eatenfood.isVegetables());
        values.put(TABLE_EATENFOOD_FRUIT, eatenfood.isFruit());
        values.put(TABLE_EATENFOOD_MEAT_BEAN_EGG,
                eatenfood.isMeat_bean_egg());
        values.put(TABLE_EATENFOOD_BREAD_CEREALS,
                eatenfood.isBread_cereals());
        values.put(TABLE_EATENFOOD_FAT, eatenfood.isFat());
        values.put(TABLE_EATENFOOD_SUGER, eatenfood.isSuger());
        values.put(TABLE_EATENFOOD_UNITSUM, eatenfood.getUnitsum());

        count = myDataBase
                .update(TABLE_EATENFOOD, values, TABLE_EATENFOOD_ID + "=?",
                        new String[] { String.valueOf(eatenfood
                                .getEatenfoodid()) });
    } catch (Exception e) {
        Log.e(TAG, "Exception: " + e.getMessage());
    } finally {
        myDataBase.close();
    }
    return count;
}

//  Getting All EatenFood ================================================

public ArrayList<EatenFood> getEatenfoods() {

    ArrayList<EatenFood> result = null;
    SQLiteDatabase myDataBase = null;
    Cursor cursor = null;
    try {
        myDataBase = openHelper.getWritableDatabase();
        cursor = myDataBase.query(TABLE_EATENFOOD, new String[] { "*" }, null, null,
                null, null, null);
        if (cursor.moveToFirst()) {
            result = new ArrayList<EatenFood>();
            do {
                result.add(extractEatenFood(cursor));
            } while (cursor.moveToNext());
        }
    } catch (Exception e) {
        Log.e(TAG, "Exception: " + e.getMessage());
    } 
    finally {
        if (cursor != null) {
            cursor.close();
        }
        myDataBase.close();
    }
    return result;      
}

// extractEatenFood=============================================================
private EatenFood extractEatenFood(Cursor cursor){
    EatenFood eatenfood = new EatenFood();
    eatenfood.setEatenfoodid(cursor.getInt(cursor.getColumnIndex(TABLE_EATENFOOD_ID)));
    eatenfood.setBreakfast(cursor.getInt(cursor.getColumnIndex(TABLE_EATENFOOD_BREAKFAST)) != 0);
    eatenfood.setLunch(cursor.getInt(cursor.getColumnIndex(TABLE_EATENFOOD_LUNCH))!=0);
    eatenfood.setSnack(cursor.getInt(cursor.getColumnIndex(TABLE_EATENFOOD_SNACK))!=0);
    eatenfood.setAppetizers(cursor.getInt(cursor.getColumnIndex(TABLE_EATENFOOD_APPETIZERS))!=0);
    eatenfood.setDinner(cursor.getInt(cursor.getColumnIndex(TABLE_EATENFOOD_DINNER))!=0);
    //      ???????????????????????? baraye day k sabt beshe
    eatenfood.setEquivalent(cursor.getString(cursor.getColumnIndex(TABLE_EATENFOOD_EQUIVALENT)));
    eatenfood.setDairy(cursor.getInt(cursor.getColumnIndex(TABLE_EATENFOOD_DAIRY))!=0);
    eatenfood.setVegetables(cursor.getInt(cursor.getColumnIndex(TABLE_EATENFOOD_VEGETABLES))!=0);
    eatenfood.setFruit(cursor.getInt(cursor.getColumnIndex(TABLE_EATENFOOD_FRUIT))!=0);
    eatenfood.setBread_cereals(cursor.getInt(cursor.getColumnIndex(TABLE_EATENFOOD_BREAD_CEREALS))!=0);
    eatenfood.setFat(cursor.getInt(cursor.getColumnIndex(TABLE_EATENFOOD_FAT))!=0);
    eatenfood.setSuger(cursor.getInt(cursor.getColumnIndex(TABLE_EATENFOOD_SUGER))!=0);
    eatenfood.setFood_id(cursor.getInt(cursor.getColumnIndex(TABLE_EATENFOOD_F_FOODID)));


    return eatenfood ;
}

1 个答案:

答案 0 :(得分:0)

每当你想在你的eatenfood表中添加食物时。您必须在特定食物对象上调用getFoodid函数并获取food_id,然后在insertEatenFood类中使用DatabaseAdapter函数插入数据库。 你最好提一下你就是问题的全部例子,这会让你更容易帮助你。 也许你有一个问题,你怎么能找到你想要插入到eatenfood表中的food_id。最好先写下你的算法,然后你会发现不同用户需要哪些food_id