安卓学习日志 Day15 — 数据库基础
文章目錄
- 概述
- 數據持久性
- 不同的存儲類型選擇
- 現實生活中的數據庫
- SQLite 數據庫
- 安裝 SQLite
- 第一次打開 SQLite
- SQLite 中的類型
- 設計和創建數據庫
- 快速提示
- CRUD
- CURD 概述
- 插入 INSERT
- 表格的局限
- 選擇、位置和排序
- 更新 UPDATE
- 刪除 DELETE
- 總結
- 參考
概述
目前為止,已經構建了各個不同的應用,也可能正急于構建自己的應用,但或許沒有具體的想法。一個很好的練習方法是詢問下當地的小商店或非盈利機構,看看他們是否需要幫助構建一個 Android 應用。
周圍有很多的小商店都需要向用戶提供信息,例如餐廳里的菜單、干洗店和裁縫店需要列出可以提供的服務。
還有更多類似的例子,需要將這些數據存儲到某個地方,例如應用中 以便隨時隨地地訪問這些數據。用戶可以使用這一應用,店內人員也可以使用這一應用來管理日常事物或跟蹤庫存情況。
之后將研究一個示例,為一個收容所的工作人員開發一款移動應用,幫助他們記錄各種不同的寵物。學習一個構建數據的強大方式,構建一款應用來利用這一結構,從而允許用戶(店內工作人員)輕松獲取每個寵物的信息,并能夠對這些信息執行操作。
數據持久性
數據持久性,簡單地說就是將數據永久的存儲起來,而實現持久化。
在之前的應用中,數據均保存在變量當中,而變量定義在 Activity 的內部,這就意味著變量 與 Activity 的生命周期相同,假如在應用運行的過程中用戶動態的改變了變量的值,這時,每當 Activity 重新加載一次,內部的變量就會重新創建一次(變量的值就會變為默認值,而非用戶動態更改的值),這是因為沒有數據持久化。
對于即將要構建的 寵物應用也是如此,如果我們沒有合理地存儲輸入到應用中的寵物信息,一旦 Activity 不再運行 這些信息就會丟失。
不同的存儲類型選擇
Android 使用的文件系統類似于其他平臺上基于磁盤的文件系統。該系統為您提供了以下幾種保存應用數據的選項:
- 應用專屬存儲空間:存儲僅供應用使用的文件,可以存儲到內部存儲卷中的專屬目錄或外部存儲空間中的其他專屬目錄。使用內部存儲空間中的目錄保存其他應用不應訪問的敏感信息。
- 共享存儲:存儲您的應用打算與其他應用共享的文件,包括媒體、文檔和其他文件。
- 偏好設置:以鍵值對形式存儲私有原始數據。
- 數據庫:使用 Room 持久性庫將結構化數據存儲在專用數據庫中。
可以看出 Android 應用中的文件存儲方式主要分為三類:文件存儲(應用專屬存儲空間或共享存儲)、偏好設置(SharedPreferences)、數據庫(Room、SQLite)。
下面有四種應用場景:
“Video Everywhere”應用可以讓你在度假的時候拍攝短片,并自動根據你去過的地點和拍攝短片的日期繪制一張地圖。你該如何存儲這些短片呢?
**答案:**文件存儲
“Baking Conversion”應用可以對烘焙中遇到的各種單位進行轉換,例如杯數轉換成毫升,湯匙數轉換為杯數。你該如何存儲用戶的單位偏好設置?
**答案:**偏好設置
“Music Share”應用可以使你購買和下載歌曲用于任何應用。你該如何存儲這些歌曲?
**答案:**文件存儲
假設有一款應用可以存儲進入收容所的寵物信息。你會使用什么來存儲寵物信息?
**答案:**數據庫
還有一種情況,應用會同時使用不止一種的數據持久化方式。
現實生活中的數據庫
到目前為止,已經見過兩個在現實生活中用到數據庫的示例:寵物收容所會存儲關于動物的數據,以及在線零售商會存儲關于庫存的數據。
日程生活中,有各種需要采用數據庫結構來存儲信息的示例。下面再舉兩個例子。
銀行賬戶
銀行不僅非常依賴于關于用戶的信息,還需要收集關于全球市場的信息,這樣才能立足市場。可以想象出他們的數據庫需要使用多個表格來匯總相關數據。
例如,他們會使用一個表格來記錄單個用戶的信息,例如用戶 ID、支票賬號、支票賬戶金額、儲蓄賬號、儲蓄賬戶金額、用戶的地址、用戶的生日、用戶名、密碼等。還可能會使用另一個表格來記錄更加通用的信息,例如貨幣匯率、信用卡利率、貸款利率等。
這些數據庫中的信息都需要接受嚴密的監督,因為這些信息太重要了。聽過“網絡安全”一詞嗎?組織機構會專門設立一個部門來確保這些數據庫的信息安全性。
航空公司
如果你在航空公司網站上預訂過機票,經常就會需要輸入飛行常客號碼。航空公司可以利用該數據在存儲客戶信息的數據庫表格中進行搜索,查找關于客戶的其他信息。
該表格可能包含其他客戶信息,例如姓名、地址、電話號碼、飛行常客號碼、信用卡信息、航班號碼、座位號碼等。
此外,航空公司需要表格來存儲關于每日航班的信息。這些表格可能包含以下數據:飛機號、起飛機場、抵達機場、已售座位數、起飛時間、抵達時間、中轉航班等。
航空公司會使用多個不同表格里的信息來幫助你選出抵達目的地最安全高效的方式。
SQLite 數據庫
SQLite 是 Android 自帶的數據庫,不需要下載或安裝任何內容就能在 Android 應用中使用 SQLite,雖然手機已經具有了 SQLite,但是計算機并沒有預裝 SQLite。
安裝 SQLite
Windwos
Windows 系統中沒有預裝 SQLite 數據庫系統,需要自行安裝。
詳細了解下這幾個步驟。
要下載正確的文件,你需要轉到此處并下載下面這兩個文件:
sqlite-shell-win32-*.zip 和 sqlite-dll-win32-*.zip
將這兩個文件下載到計算機上后,打開 Windows 資源管理器并轉到 C 盤,然后創建一個文件夾,叫做“sqlite”。將下載的 .zip 文件復制到該文件夾里,然后解壓縮了。
完成上述操作后,你需要將 C:>sqlite 添加到系統的 PATH 環境變量里。如果你從未執行過這一操作,請按照這些步驟來操作。
最后,需要打開命令提示符程序,并輸入 sqlite3,然后按下 Enter 鍵。
Mac OS X
最新版本的 OS X 已經預裝了 SQLite,所以可能不需要執行任何操作。要查看是否預裝了 SQLite,打開終端程序(可以從桌面的右上角找到該程序),輸入 sqlite3,然后按下 Enter 鍵。如果出現的結果中包含“SQLite 版本”和一些數字,那就很幸運,預裝了!
如果沒有,則需要自己手動安裝。為此,你需要下載相關文件,在終端程序中輸入一些命令。
首先轉到 此處 并下載 sqlite-autoconf-*.tar.gz。
然后打開終端,并輸入以下命令。注意 $ 符號表示一行的開頭位置,不需要輸入。例如,對于最后一行,只需要輸入“make install”,然后按下 Enter 鍵。
$tar xvfz sqlite-autoconf-3071502.tar.gz$cd sqlite-autoconf-3071502$./configure --prefix=/usr/local$make$make install輸入這些命令后,Mac 上就安裝好 SQLite 了!
第一次打開 SQLite
sqlite3 在命令提示符窗口里打開 sqlite3 程序的命令。
sqlite3 shelter.db 打開 sqlite3 程序并直接打開以下數據庫文件的命令。可以將 shelter.db 替換為任何現有的數據庫文件。
.open shelter.db sqlite 在程序中用來打開數據庫文件的命令。在這里,打開的是 shelter.db 文件。可以將 shelter.db 替換為任何現有的其他 .db 文件。
.help 調出可用命令列表的命令
.quit 退出 sqlite 應用的命令
Windows 系統
echo %cd% echo 請求計算機向屏幕上輸出內容。在這里,使用 %cd% 來要求計算機輸出“當前目錄”(即當前所處的目錄)。
Mac 或 Linux系統
pwd 這一簡寫表示的是“當前工作目錄”。和上述 Windows 命令一樣,在屏幕上輸出我們當前工作所處的目錄。
sqlite3 在終端里打開 sqlite3 程序的命令。
SQLite 中的類型
大多數 SQL數據庫引擎(據我們所知,除了SQLite之外的所有SQL數據庫引擎)使用靜態的、嚴格的類型。使用靜態類型時,值的數據類型由其容器決定——存儲值的特定列。SQLite 使用更通用的動態類型系統。在SQLite中,值的數據類型與值本身相關聯,而不是與它的容器相關聯。SQLite的動態類型系統向后兼容其他數據庫引擎更常見的靜態類型系統,因為在靜態類型數據庫上工作的SQL語句在SQLite中應該以同樣的方式工作。然而,SQLite中的動態類型允許它做一些在傳統的嚴格類型數據庫中不可能做的事情。
存儲在SQLite數據庫中的每個值(或由數據庫引擎操作)都有以下存儲類之一:
- NULL:表示空值
- INTEGER:該值是一個有符號整數,根據值的大小存儲在1、2、3、4、6或8個字節中。
- REAL:該值為浮點值,存儲為8字節的IEEE浮點數。
- TEXT:文本字符串,使用數據庫編碼(UTF-8、UTF-16BE或UTF-16LE)存儲。
- BLOB:該值是一組數據,存儲方式與輸入時完全相同。
SQLite沒有單獨的布爾存儲類。相反,布爾值存儲為整數0 (false)和1 (true)。
存儲類比數據類型更通用。例如,整數存儲類包括6種不同長度的整數數據類型。這在磁盤上造成了不同。但是一旦整數值從磁盤讀取到內存中進行處理,它們就會被轉換為最通用的數據類型(8字節有符號整數)。因此,在大多數情況下,“存儲類”與“數據類型”是無法區分的,這兩個術語可以互換使用。
SQLite version 3數據庫中的任何列,除了整數主鍵列之外,都可以用來存儲任何存儲類的值。
假設在接下要構建的寵物應用中將存儲的寵物信息有:Name(姓名)、Breed(品種)、Gender(性別)、Weight(體重/千克),并在 SQLite 數據庫系統中使用如下存儲類來存儲寵物的每個信息。
- Name:使用 TEXT 存儲類存儲字符串
- Breed:可選,由于不確定會有多少個品種寵物,使用 TEXT 字符串存儲類
- Gender:性別有三種情況:0 (未知)、1(男)、2(女),因此使用 INTEGER 存儲類更好
- Weight:這里假設不存在小數的情況,所以使用 INTEGER 存儲類
設計和創建數據庫
下面將創建一個 存儲耳機信息的 SQLite數據庫作為示例。
首先,使用 sqlite3 新建一個名為 store.db 的數據庫文件:
PS C:\Users\blood\Desktop> sqlite3.exe shelter.db SQLite version 3.32.2 2020-06-04 12:58:43 Enter ".help" for usage hints. sqlite> .tables sqlite>新建數據表語法參考:
CREATE TABLE <table_name>( <column_name_1> <data_type_1>, <column_name_2> <data_type_2>, ...);創建 headphones 數據表,用于存儲耳機的相關信息。
sqlite> CREATE TABLE headphones(_id INTEGER,...> name TEXT,...> price INTEGER,...> style INTEGER,...> in_stock INTEGER,...> description TEXT); sqlite> .tables headphones sqlite> .schema headphones CREATE TABLE headphones(_id INTEGER, name TEXT, price INTEGER, style INTEGER, in_stock INTEGER, description TEXT); sqlite> PRAGMA TABLE_INFO(headphones); 0|_id|INTEGER|0||0 1|name|TEXT|0||0 2|price|INTEGER|0||0 3|style|INTEGER|0||0 4|in_stock|INTEGER|0||0 5|description|TEXT|0||0 sqlite> DROP TABLE headphones; sqlite> .tables sqlite>最后,要為寵物應用在 shelter.db 數據庫中創建 pets 數據表:
其中 _id 字段作為每個寵物的唯一標識。
CREATE TABLE pets (_id INTEGER, name TEXT, breed TEXT, gender INTEGER, weight INTEGER);快速提示
這里給出幾個 SQLite 數據庫中的提示。
CRUD
CURD 概述
創建好表格后就可以向表格中添加行,并讀取和操縱其中的數據,對表格執行的基本操作可以總結為一個詞 CRUD。
CRUD 是與數據庫相關的縮寫,表示 Create(創建)、Read(讀取)、Update(更新)和 Delete(刪除)
插入 INSERT
INSERT 語句:
INSERT INTO <table_name>( <column_name_1>, <column_name_2>, …) VALUES ( <values_1>, <values_2>, …);創建寵物表格
CREATE TABLE pets (_id, name, breed, gender, weight);在第 1 行插入關于 Tommy 的信息
INSERT INTO pets (_id, name, breed, gender, weight) VALUES (1, "Tommy", "Pomeranian", 1, 4);在第 2 行插入關于 Garfield 的數據
INSERT INTO pets (_id, name, breed, gender, weight) VALUES (2, "Garfield", "Tabby", 1, 8);將模式改成 column
.mode column顯示表頭
.header on從寵物表格中讀取所有的列和行
SELECT * FROM pets;結果
_id name breed gender weight ---------- ---------- ---------- ---------- ---------- 1 Tommy Pomeranian 1 4 2 Garfield Tabby 1 8表格的局限
現在 pets 表格中已經有了兩條數據:
sqlite> SELECT * FROM pets; _id name breed gender weight ---------- ---------- ---------- ---------- ---------- 1 Tommy Pomeranian 1 4 2 Garfield Tabby 1 8現在 再插入一條數據:
sqlite> INSERT INTO pets (_id, name, breed, gender, weight) VALUES (1, "Binx", "Bomboy", 1, 5); sqlite> sqlite> SELECT * FROM pets; _id name breed gender weight ---------- ---------- ---------- ---------- ---------- 1 Tommy Pomeranian 1 4 2 Garfield Tabby 1 8 1 Binx Bomboy 1 5從輸出內容可以看出,本來應該唯一的 _id 字段不再唯一。
如果再傳入一條數據,并且忘記指定 寵物的名稱:
sqlite> INSERT INTO pets (_id, breed, gender, weight) VALUES (3, "Bomboy", 1, 5); sqlite> sqlite> SELECT * FROM pets; _id name breed gender weight ---------- ---------- ---------- ---------- ---------- 1 Tommy Pomeranian 1 4 2 Garfield Tabby 1 8 1 Binx Bomboy 1 5 3 Bomboy 1 5現在可以看到 id 為 3 的寵物姓名沒有值,這在寵物收容所中是不應該存在的情況。
SQL 提供了一些便捷的關鍵字,幫助我們避免出現 上述情況,比如:
- PRIMARY KEY:確保唯一性。每個表只能有一個主鍵。
- AUTOINCREMENT:自動計算新的整數值,一般用于 ID 列。
- NOT NULL:當一個值被插入到表中時,它必須有一個與其相關聯的值。
- DEFAULT <value>:當插入新行時,如果沒有提供值,則使用“默認值”。
這只是一部分,并沒有列全,但對應 pets 表格來說已經夠夠用了。
我們希望 pets 數據表的 id 字段作為唯一標識,并且 name 字段不能為空,在相應的字段后 添加約束條件。
先使用 SQL 命令 DROP TABLE pets; 刪除已有的數據表,然后重新創建 pets 數據表:
sqlite> DROP TABLE pets; sqlite> sqlite> CREATE TABLE pets(...> _id INTEGER PRIMARY KEY AUTOINCREMENT,...> name TEXT NOT NULL,...> breed TEXT,...> gender INTEGER,...> weight INTEGER); sqlite> sqlite> PRAGMA TABLE_INFO(pets); cid name type notnull dflt_value pk ---------- ---------- ---------- ---------- ---------- ---------- 0 _id INTEGER 0 1 1 name TEXT 1 0 2 breed TEXT 0 0 3 gender INTEGER 0 0 4 weight INTEGER 0 0這時 id 字段已經可以自增長,所以在插入數據時不必 指定 id 字段的值:
sqlite> INSERT INTO pets (name, breed, gender, weight) VALUES ("Tommy", "Pomeranian", 1, 4); sqlite> sqlite> INSERT INTO pets (name, breed, gender, weight) VALUES ("Garfield", "Tabby", 1, 8); sqlite> sqlite> SELECT * FROM pets; _id name breed gender weight ---------- ---------- ---------- ---------- ---------- 1 Tommy Pomeranian 1 4 2 Garfield Tabby 1 8如果插入一條 id 已經存在的數據,則會報錯,因為 id 應該唯一,比如 1:
sqlite> INSERT INTO pets (_id, name, breed, gender, weight) VALUES (1, "Binx", "Bomboy", 1, 5); Error: UNIQUE constraint failed: pets._id同樣的,插入一條 name 字段為空的數據也會報錯,因為不允許為空:
sqlite> INSERT INTO pets (_id, breed, gender, weight) VALUES (3, "Bomboy", 1, 5); Error: NOT NULL constraint failed: pets.name下面對 pets 表中剩下的幾個字段添加約束(先刪除現有的 pets 數據表)。
sqlite> DROP TABLE pets; sqlite> sqlite> CREATE TABLE pets (...> _id INTEGER PRIMARY KEY AUTOINCREMENT,...> name TEXT NOT NULL,...> breed TEXT,...> gender INTEGER NOT NULL,...> weight INTEGER NOT NULL DEFAULT 0); sqlite> sqlite> PRAGMA TABLE_INFO(pets); cid name type notnull dflt_value pk ---------- ---------- ---------- ---------- ---------- ---------- 0 _id INTEGER 0 1 1 name TEXT 1 0 2 breed TEXT 0 0 3 gender INTEGER 1 0 4 weight INTEGER 1 0 0解釋:
CREATE TABLE用來創建新的表格的 SQL 關鍵字
pets指的是要創建的表格的名稱
_id INTEGER PRIMARY KEY AUTOINCREMENT,表格的第一列將稱為 _id,類型為 INTEGER。因為我們希望將其作為表格行的 ID,所以使用關鍵字 PRIMARY KEY。當新的行創建后,我們希望 ID 能自動按升序增大,所以使用關鍵字 AUTOINCREMENT。
name TEXT NOT NULL,名稱的數據類型為 TEXT。我們用關鍵字 NOT NULL 表明此列必須具有值。
breed TEXT,品種的數據為 TEXT。因為是選填的,所以我們不需要關鍵字 NOT NULL
gender INTEGER NOT NULL,性別的數據類型為 INTEGER(0 - 未知,1 - 公,2 - 母)。我們用關鍵字 NOT NULL 表明此列必須具有值。
weight INTEGER NOT NULL DEFAULT 0);體重的數據類型為 INTEGER。我們用關鍵字 NOT NULL 表明此列必須具有值。我們用 DEFAULT 0 表示默認值將為 0(如果未提供)。
選擇、位置和排序
當數據表中的數據 有很多時,我們可能只關心 滿足特定條件的 信息,比如 5 歲以上的寵物、不足 18 千克的寵物,或是同時滿足多個條件的寵物。
在此之前先插入一些數據:
sqlite> INSERT INTO pets (name, breed, gender, weight) VALUES ( "Tommy", "Pomeranian", 1, 4); sqlite> INSERT INTO pets (name, breed, gender, weight) VALUES ("Garfield", "Tabby", 1, 14); sqlite> INSERT INTO pets (name, breed, gender, weight) VALUES ("Binx", "Bombay", 1, 6); sqlite> INSERT INTO pets (name, breed, gender, weight) VALUES ( "Lady", "Cocker Spaniel", 2, 14); sqlite> INSERT INTO pets (name, breed, gender, weight) VALUES ("Duke", "Unknown", 1, 70); sqlite> INSERT INTO pets (name, breed, gender, weight) VALUES ("Cat", "Tabby", 0, 7); sqlite> INSERT INTO pets (name, breed, gender, weight) VALUES ("Baxter", "Border Terrier", 1, 8); sqlite> INSERT INTO pets (name, gender, weight) VALUES ("Arlene", 2, 5); sqlite> sqlite> SELECT * FROM pets; _id name breed gender weight ---------- ---------- ---------- ---------- ---------- 1 Tommy Pomeranian 1 4 2 Garfield Tabby 1 14 3 Binx Bombay 1 6 4 Lady Cocker Spa 2 14 5 Duke Unknown 1 70 6 Cat Tabby 0 7 7 Baxter Border Ter 1 8 8 Arlene 2 5WHERE 關鍵字可以指定要查詢的條件,WHERE 子句確保只有符合指定條件的行受到影響,可以與 SELECT、INSERT、UPDATE或DELETE語句一起使用。
分別查詢 id 等于 3 和 體重大于等于 18 千克的寵物
sqlite> SELECT * FROM pets WHERE _id == 3; _id name breed gender weight ---------- ---------- ---------- ---------- ---------- 3 Binx Bombay 1 6 sqlite> sqlite> SELECT * FROM pets WHERE weight >= 18; _id name breed gender weight ---------- ---------- ---------- ---------- ---------- 5 Duke Unknown 1 70使用 AND 關鍵字來組合查詢條件:
性別為雄性,且 體重大于 10 千克的寵物
sqlite> SELECT * FROM pets WHERE gender == 1 AND weight > 10; _id name breed gender weight ---------- ---------- ---------- ---------- ---------- 2 Garfield Tabby 1 14 5 Duke Unknown 1 70ORDER BY 對查詢結果進行排序根據列出的列,按升序(ASC)或降序(DESC)對數據進行排序:
sqlite> SELECT * FROM pets WHERE _id <= 5 ORDER BY name; _id name breed gender weight ---------- ---------- ---------- ---------- ---------- 3 Binx Bombay 1 6 5 Duke Unknown 1 70 2 Garfield Tabby 1 14 4 Lady Cocker Spa 2 14 1 Tommy Pomeranian 1 4查詢 雌性寵物的 姓名和體重,并按體重從高到底排序:
sqlite> SELECT name, weight FROM pets WHERE gender == 2 ORDER BY weight DESC; name weight ---------- ---------- Lady 14 Arlene 5更新 UPDATE
有一只寵物的體重超過了 50 千克,寵物管理員對它進行了減肥,這時就需要在寵物信息表中 更改這只寵物的體重信息 為 40 千克。
sqlite> SELECT _id, name, weight FROM pets WHERE weight > 50; _id name weight ---------- ---------- ---------- 5 Duke 70更改表中的數據可以使用 UPDATE 語句實現,語法:
UPDATE <table_name> SET <column_name> = <value> WHERE <condition>;使用 UPDATE 語句更新 寵物的體重值:
sqlite> UPDATE pets SET weight = 40 WHERE _id = 5; sqlite> sqlite> SELECT _id, name, weight FROM pets WHERE _id = 5; _id name weight ---------- ---------- ---------- 5 Duke 40有一天,寵物收容所的稱出了問題,所有寵物都要進行重新稱重,在這之前需要把所有寵物 的體重改為 0 千克:
sqlite> UPDATE pets SET weight = 0; sqlite> sqlite> SELECT _id, name, weight FROM pets; _id name weight ---------- ---------- ---------- 1 Tommy 0 2 Garfield 0 3 Binx 0 4 Lady 0 5 Duke 0 6 Cat 0 7 Baxter 0 8 Arlene 0刪除 DELETE
最后要了解的數據庫操作是將所有錯誤地輸入輸入到數據庫中的寵物刪掉。
DELETE 語句可以實現從表中刪除數據,語法:
DELETE FROM <table_name> WHERE <condition>;這是為刪除任何數據之前的 所有寵物信息:
sqlite> SELECT * FROM pets; _id name breed gender weight ---------- ---------- ---------- ---------- ---------- 1 Tommy Pomeranian 1 0 2 Garfield Tabby 1 0 3 Binx Bombay 1 0 4 Lady Cocker Spa 2 0 5 Duke Unknown 1 0 6 Cat Tabby 0 0 7 Baxter Border Ter 1 0 8 Arlene 2 0下面將 性別 未知的寵物信息:
sqlite> DELETE FROM pets WHERE gender = 0; sqlite> sqlite> SELECT * FROM pets; _id name breed gender weight ---------- ---------- ---------- ---------- ---------- 1 Tommy Pomeranian 1 0 2 Garfield Tabby 1 0 3 Binx Bombay 1 0 4 Lady Cocker Spa 2 0 5 Duke Unknown 1 0 7 Baxter Border Ter 1 0 8 Arlene 2 0寵物性別為 雄性 且 id 大于 5 的寵物信息有誤,需要進行刪除:
sqlite> DELETE FROM pets WHERE gender = 1 AND _id > 5; sqlite> sqlite> select * from pets; _id name breed gender weight ---------- ---------- ---------- ---------- ---------- 1 Tommy Pomeranian 1 0 2 Garfield Tabby 1 0 3 Binx Bombay 1 0 4 Lady Cocker Spa 2 0 5 Duke Unknown 1 0 8 Arlene 2 0如果 店內所有的寵物都 被人領養走了,則需要刪除所有的寵物信息:
sqlite> DELETE FROM pets; sqlite> sqlite> SELECT * FROM pets; sqlite>總結
現在已經知道如何處理數據庫中的數據了,先創建了一個數據庫,然后在其中創建了數據表。然后討論了如何向表格中插入行,并更新和刪除這些行。接著又 使用了 WHERE 條件 和 ORDER BY 排序 來查詢數據,并獲得關心的行和列。
SQLite 中的存儲類的使用十分靈活,即使聲明了字段的存儲類,也仍然可以插入任意類型的值,這也解釋了為什么創建表時可以不=聲明字段類型。
參考
計算機內存和硬盤存儲空間之間的區別
數據和文件存儲概覽
關于 SQL 和 SEQUEL 之間區別的有趣討論:
有些人發成“S-Q-L”,有些人叫成“sequel”,都指的是同一概念。追溯下歷史:縮寫“SEQUEL”后來改成了 SQL,因為”SEQUEL“是一家英國航空公司 Hawker Siddeley 的商標
SQL 維基百科界面
詳細了解 SQLite 中的數據類型,請點擊此處。
Command Line Shell For SQLite
總結
以上是生活随笔為你收集整理的安卓学习日志 Day15 — 数据库基础的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java添加按钮点击事件_如何为odoo
- 下一篇: 使用 Metasploit 利用 MyS