目的
新增新功能:計算某使用者在某天攝取的總熱量。
把計算過程寫出。
1.主選單
新增選項5.計算單日總熱量。
2.Main
userId、date跟前面寫法一樣。
double totalCalories = dao.calculateTotalCalories(userId,date):呼叫calculateTotalCalories方法(後面會創),放入userId、date,把結果存入變數totalCalories。
System.out.printf():用來格式化輸出文字,比println更方便顯示數字格式。
(使用者%d在%s的總熱量為:%2f kcal%n,userId,date,totalCalories):%d會被替換成整數(userId);%s會被替換成字串(date);%.2f會被替換成浮點數,並保留兩位小數(totalCalories);%n換行符號。
3.FoodLogDAO
SELECT f.name,f.calories,fl.quantity,(f.calories*fl.quantity) AS total:取出food表(在SQL的FROM/JOIN中的別名為f)的食物名...,fl為foodLog表的別名,()裡為每筆食物的總熱量,用AS用來給欄位/表格取別名total。
FROM food_log fl:指定查詢的資料表來源。
JOIN food f ON fl.food_id =f.food_id:連結(JOIN)另一個資料表food,指定連接條件(ON),只有符合條件的記錄才會被合併,這樣才能拿到fl的份量和f的熱量。
WHERE fl.id = ? AND fl.date = ? :指定查詢的條件為,某使用者在特定日期的食物記錄,避免抓到其他資料。
java.sql.Date.valueOf(date):將LocalDate或字串日期轉換成SQL可接受的形式。
totalCalories += total:將每筆食物熱量累加到每日總熱量。
%s被替換成字串(name),%.1f被替換成浮點數,保留1小數。
最後回傳總熱量。
4.結果