2014-10-19 72 views
1

。我開始編寫飲食計劃器項目,這是我的數據庫表。我使用外部數據庫並在那裏定義表外鍵並將其複製到資產文件夾中,然後將其連接到我的項目。 standardUnit,Foods和standardFoodUnit是3張有靜態數據的表格,我填充了它們,但EatenFood表格是在計算後動態填充的。 我使用模型類,並嘗試用androidhive database tutorial指令編寫databaseAdapter.but因爲我最近開始使用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 ; 
} 

回答

0

每當你想添加食物到你的桌子eatenfood。你必須調用getFoodid功能,你是特定的食物對象,並獲得food_id和之後,插入到insertEatenFood函數在你的功能DatabaseAdapter類。 最好你提到你是你的問題的完整例子,這使得它更容易幫助你。 也許你有一個問題,你怎麼能找到你想插入你的food_id是eatenfood表。在寫完算法之後,你會發現哪一個food_id是需要的,因爲你是不同的用戶。