【问题标题】:Initialized foreign key in dynamic table动态表中初始化的外键
【发布时间】:2014-12-14 09:52:18
【问题描述】:

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

这是 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 .........}

数据库适配器函数

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

【问题讨论】:

    标签: java android mysql database foreign-keys


    【解决方案1】:

    只要您想在eatenfood 餐桌上添加食物。您必须在您的特定食物对象上调用getFoodid 函数并获取food_id,然后在您的DatabaseAdapter 类中使用insertEatenFood 函数插入数据库。 最好你提到你是你问题的完整例子,这样更容易帮助你。 也许您对如何找到要插入到 eatenfood 表中的 food_id 有疑问。最好先写你的算法,然后你会发现你是不同的用户需要哪个food_id

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-05
      • 1970-01-01
      • 2011-10-30
      • 2023-03-19
      • 2018-09-18
      • 1970-01-01
      • 2012-06-26
      • 1970-01-01
      相关资源
      最近更新 更多