2014-10-19 3 views
1

에 초기화 된 외래 키 다이어트 플래너 프로젝트를 작성하기 시작했습니다. 이것은 내 데이터베이스 테이블입니다. 외부 데이터베이스를 사용하고 외래 키 테이블을 정의하고 자산 폴더에 복사 한 다음 내 프로젝트에 연결합니다. standardUnit, Foods 및 standardFoodUnit은 정적 데이터가있는 3 개의 테이블이며 이전에 채웠지만 EatenFood 테이블은 계산 후에 동적으로 채워집니다. 모델 클래스를 사용하고 androidhive database tutorial instruction.but와 함께 databaseAdapter를 작성하려고합니다. 최근에 안드로이드를 시작했기 때문에 최근에 그것에 대한 비전이 없습니다. 책 또는 온라인 자습서를 읽으려고 시도하지만 그들은 나를 더 섞어 버립니다. 지금 이것은 내 질문이다, 나는 EatenFood 테이블 외래 키에 대해 알고 싶다. 어떻게 food-id 값을 넣을 수 있을까? 전에 데이터베이스에 food_id INTEGER REFERENCES Foods (_id)을 정의했으나 insert 또는 update 또는 get 함수를 위해 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이 필요할 것입니다.