iT邦幫忙

2024 iThome 鐵人賽

DAY 19
0
Mobile Development

Jetpack Compose 從心開始系列 第 19

Jetpack Compose 從心開始 Day19 - 使用 SQL 讀取資料庫並在其中寫入資料

  • 分享至 

  • xImage
  •  

前言

    Android 應用程式有多種儲存資料的方式,包括內部和外部儲存空間,像 Room 和 Preferences Datastore。那用Room之前來覆習一下 SQL.  

關聯式資料庫的重要概念

關聯式資料庫的重要概念
關聯式資料庫 (Relational Database) 是現代應用程式中儲存和管理資料的基礎。它以表格的形式組織資料,並通過鍵來建立表之間的關係。

  1. 表 (Table)
  2. 欄位 (Column)
  3. 關係 (Relationship)

https://ithelp.ithome.com.tw/upload/images/20240929/201216433WTGwz3JjZ.png

data class Student(
    id: Int,
    name: String,
    major: String,
    gpa: Double
)

用Android Studio 看 DB 資料

在 Android Studio 中,依序點選「View」>「Tool Windows」>「App Inspection」。

https://ithelp.ithome.com.tw/upload/images/20240929/20121643moiwiM47ic.png

使用 SELECT 陳述式讀取資料

SELECT 陳述式是 SQL 語言中用來查詢資料庫中資料的基礎指令。透過它,我們可以從一個或多個表格中選取符合特定條件的資料,並以我們想要的方式呈現結果。

SELECT 陳述式的基本結構

  • SELECT: 指定要選取的欄位。
  • FROM: 指定要查詢的表格。
  • WHERE: 指定查詢條件,用來篩選出符合條件的資料。
SQL
SELECT column1, column2, ...
FROM table_name
WHERE condition;

例如:
SELECT * FROM email;
SELECT subject FROM email;
SELECT subject, sender FROM email;

https://ithelp.ithome.com.tw/upload/images/20240929/20121643eavye6bz0d.png

使用 SELECT 陳述式搭配匯總函式及 DISTINCT 關鍵字

匯總函數: 用來對一組值進行計算,常見的匯總函數包括:

  • COUNT(): 計算行數
  • SUM(): 計算總和
  • AVG(): 計算平均值
  • MAX(): 找出最大值
  • MIN(): 找出最小值
  • DISTINCT: 移除重複的記錄,只保留唯一值。
SQL
-- 計算產品表中不同類型的產品數量
SELECT COUNT(DISTINCT product_type) FROM products;

-- 計算訂單總金額
SELECT SUM(total_price) FROM orders;

-- 找出客戶購買金額最高的訂單
SELECT MAX(total_price) FROM orders;

例如:
SELECT COUNT(*) FROM email;
SELECT MAX(received) FROM email;
SELECT sender FROM email;
SELECT DISTINCT sender FROM email;
SELECT COUNT(DISTINCT sender) FROM email;

https://ithelp.ithome.com.tw/upload/images/20240929/201216434HgqQkxDfK.png

使用 WHERE 子句篩選查詢

WHERE 子句用來指定查詢條件,篩選出符合條件的資料。

SQL
-- 查詢價格大於 100 的產品
SELECT * FROM products WHERE price > 100;

-- 查詢訂單日期在 2023 年的訂單
SELECT * FROM orders WHERE order_date BETWEEN '2023-01-01' AND '2023-12-31';

例如:
SELECT * FROM email
WHERE folder = 'inbox';

SELECT * FROM email
WHERE folder = 'inbox' AND read = false;

SELECT * FROM email
WHERE folder = 'important' OR starred = true;

SELECT COUNT(*) FROM email
WHERE subject LIKE '%fool%';

SELECT * FROM email
WHERE subject LIKE '%fool';

SELECT DISTINCT sender FROM email
WHERE sender LIKE 'h%';

https://ithelp.ithome.com.tw/upload/images/20240929/20121643ys8hkdhWzN.png

將結果分組、排序及限制結果數量

  • GROUP BY: 將查詢結果根據指定欄位分組。
  • ORDER BY: 按指定欄位對結果進行排序。
  • LIMIT: 限制返回的記錄數量。
SQL
-- 查詢每個客戶的訂單總金額,並按總金額降序排列
SELECT customer_id, SUM(total_price) AS total_spent
FROM orders
GROUP BY customer_id
ORDER BY total_spent DESC
LIMIT 10;

例如:
SELECT folder, COUNT(*) FROM email
GROUP BY folder;

SELECT * FROM email
ORDER BY received DESC;

SELECT * FROM email
WHERE subject LIKE '%fool%'
ORDER BY received ASC;

SELECT * FROM email
WHERE folder = 'inbox'
ORDER BY received DESC
LIMIT 10;

SELECT * FROM email
WHERE folder = 'inbox'
ORDER BY received DESC
LIMIT 10 OFFSET 10;

https://ithelp.ithome.com.tw/upload/images/20240929/20121643sX1gYMPeOf.png

在資料庫中插入、更新及刪除資料

  • INSERT: 插入新的資料記錄。
  • UPDATE: 更新現有的資料記錄。
  • DELETE: 刪除資料記錄。
SQL
-- 插入一條新的客戶記錄
INSERT INTO customers (name, email) VALUES ('John Doe', 'johndoe@example.com');

-- 更新客戶的電子郵件地址
UPDATE customers SET email = 'new_email@example.com' WHERE id = 1;

-- 刪除 id 為 2 的客戶
DELETE FROM customers WHERE id = 2;

例如:
INSERT INTO email
VALUES (
NULL, 'Lorem ipsum dolor sit amet', 'sender@example.com', 'inbox', false, false, CURRENT_TIMESTAMP
);

SELECT * FROM email
WHERE sender = 'sender@example.com';

UPDATE email
SET read = true
WHERE id = 44;

SELECT read FROM email
WHERE id = 44;

DELETE FROM email
WHERE id = 44;

SELECT * FROM email
WHERE id = 44;

https://ithelp.ithome.com.tw/upload/images/20240929/20121643IzCe1tiB4u.png


上一篇
Jetpack Compose 從心開始 Day18 - 載入並顯示網際網路上的圖片
下一篇
Jetpack Compose 從心開始 Day20 - 使用 Room
系列文
Jetpack Compose 從心開始30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言