Java 學習記錄110 — Introduction to SQLite 2

張小雄
8 min readJan 26, 2022

--

打開 cmd

輸入:sqlite3 test.db

輸出:

SQLite version 3.37.2 2022–01–06 13:25:41

Enter “.help” for usage hints.

創了一個 test 的資料庫

輸入:.headers on

輸出:無(讓 col 的欄位出現名稱)

輸入: create table contacts(name text, phone integer, email text);

輸出:無(創了一張叫做聯絡人的表 有三個欄位)記得尾巴要加 ;

沒出現任何提示通常就是成功,有問題才會出現提示

輸入:insert into contacts(name,phone,email)values('Tim','334678','Tim@mail.com');

輸出:無(對著剛創的聯絡人的表,插入了一筆數據)

輸入:SELECT * FROM contacts;

輸出:

name|phone|email

Tim|334678|Tim@mail.com

查詢這張表的所有資料

剛剛輸入的 .headers on 就是第一行的提示

* 就是所有欄位

Tim 老師說大小寫都沒差,但一般大家習慣把關鍵字用大寫,所以後面都會用大寫

輸入: SELECT email FROM contacts;

輸出:

Tim@mail.com

只顯示 email 欄位的資料

輸入:INSERT INTO contacts VALUES("Brian",223456,"brian@mail.com");

輸出:無(新增一筆資料,因為提供了所有的欄位,這是簡略的寫法)

輸入:INSERT INTO contacts VALUES("Tim",1122345);

輸出:

Error: in prepare, table contacts has 3 columns but 2 values were supplied (1)

有三個欄位,但只提供兩個,前面也沒指定是給哪兩個欄位,所以就報錯

輸入:INSERT INTO contacts(name,phone)VALUES("Steve",112234);

輸出:無(這次也是兩個但有指定欄位)

輸入: SELECT * FROM contacts;

輸出:

name|phone|email

Tim|334678|Tim@mail.com

Brian|223456|brian@mail.com

Steve|112234|

同學 Zachary 補充:

Here is how to make table look more user friendly than this:

_id|name|artist
124|Our Time in Eden|11
287|Over-nite Sensation|140

And look more like this:

_id         name        artist    
---------- ---------- ----------
54 18 Singles 193
281 1984 84

Type these commands, the first shows current options enabled, the second changes to column mode, and the third specifies the column width.

.show.headers on.mode column.width 6  20  6

And there you are, a very readable database render!

輸入:INSERT INTO contacts VALUES("Avril","+61 (0)87654321", "avril@email.com");

輸出:無

Tim 老師補充說:電話的欄位應該用 String 比較好,但他也說在 sqlite 裡面其實沒有數據類型,那只是給我們自己的提示而已

輸入:SELECT * FROM contacts;

輸出:

name|phone|email

Tim|334678|Tim@mail.com

Brian|223456|brian@mail.com

Steve|112234|

Avril|+61 (0)87654321|avril@email.com

當初創的時候是 create table contacts(name text, phone integer, email text);

最新這筆的 name 跟 email 都是放入 integer 還是成功了

但如果這些數據拉下來跟 Java 交互操作的話,很有可能報錯

例如以為這欄都是 integer 想要全部加總起來,但裡面卻混有 String 那程序就會崩潰

或是把 String 附到 integer 變量也是一樣

所以在 sqlite 還是要注意數據類型有沒有存到對應欄位

Tim 說其他資料庫,如果沒存對的話,有的會直接拒絕

輸入: .backup testbackup

輸出:無(等下要更新資料,先備份一下資料庫)

輸入: UPDATE contacts SET email="steve@hisemail.com";

輸出:無(更新 email)

輸入:SELECT * FROM contacts;

輸出:

name|phone|email

Tim|334678|steve@hisemail.com

Brian|223456|steve@hisemail.com

Steve|112234|steve@hisemail.com

Avril|+61 (0)87654321|steve@hisemail.com

因為沒有說要更新哪一個 mail,結果全部都更新了

所以使用 UPDATE 一定要特別小心,不然不小心把幾萬筆資料全改了又沒備份那就GG

輸入:.restore testbackup

輸出:無(好在剛剛有先備份)

輸入:SELECT * FROM contacts;

輸出:

name|phone|email

Tim|334678|Tim@mail.com

Brian|223456|brian@mail.com

Steve|112234|

Avril|+61 (0)87654321|avril@email.com

全部還原回來了

輸入:UPDATE contacts SET email="steve@hisemail.com" WHERE name = "Steve";

輸出:無(更新特定筆資料,只需要加上 WHERE)

輸入:SELECT * FROM contacts;

輸出:

name|phone|email

Tim|334678|Tim@mail.com

Brian|223456|brian@mail.com

Steve|112234|steve@hisemail.com

Avril|+61 (0)87654321|avril@email.com

之前是 Steve|112234|

原本 email 是空白的,現在補上了

輸入:SELECT * FROM contacts WHERE name="Brian";

輸出:

name|phone|email

Brian|223456|brian@mail.com

WHERE 很好用,可以搭配 SELECT 使用,查看符合要求的資料

輸入:SELECT phone,email FROM contacts WHERE name="Brian";

輸出:

phone|email

223456|brian@mail.com

加上欄位的話,也能只顯示該欄位的資料

輸入: DELETE FROM contacts WHERE phone=223456;

輸出:無

刪除電話等於 223456 的資料

刪除跟更新一樣都要很小心,不加 WHERE 的話,這張表就全刪了

輸入: SELECT * FROM contacts;

輸出:

name|phone|email

Tim|334678|Tim@mail.com

Steve|112234|steve@hisemail.com

Avril|+61 (0)87654321|avril@email.com

剛剛的 Brian|223456|brian@mail.com 這筆已經找不到了,代表被刪了

輸入:.tables

輸出:

contacts

顯示目前創建的所有資料庫

輸入:.schema

輸出:

CREATE TABLE contacts(name text, phone integer, email text);

忘記表的屬性可以回來查看

有多張表的話,記得加入名子

現在只有一張表所以不用加

輸入:.dump

輸出:

PRAGMA foreign_keys=OFF;

BEGIN TRANSACTION;

CREATE TABLE contacts(name text, phone integer, email text);

INSERT INTO contacts VALUES(‘Tim’,334678,’Tim@mail.com’);

INSERT INTO contacts VALUES(‘Steve’,112234,’steve@hisemail.com’);

INSERT INTO contacts VALUES(‘Avril’,’+61 (0)87654321',’avril@email.com’);

COMMIT;

這張表的一些訊息

--

--

張小雄
張小雄

Written by 張小雄

記錄成為軟體工程師的過程

No responses yet