SQLite是一個輕量級的資料庫,其在嵌入式設備、移動設備、桌面應用等領域都有廣泛的應用。在Go語言中,我們通過sqlite3這個第三方庫來實現對SQLite資料庫的操作。
一、連接資料庫
連接資料庫是使用SQLite進行數據操作的必要步驟,下面的代碼演示了如何在Go語言中連接SQLite資料庫:
db, err := sql.Open("sqlite3", "./test.db") if err != nil { log.Fatal(err) } defer db.Close()
在上面的代碼中,我們使用了sql.Open()函數來連接SQLite資料庫,其中第一個參數是資料庫類型,這裡我們傳入了「sqlite3」表示使用SQLite進行操作。第二個參數是資料庫文件路徑,這裡我們傳入了「./test.db」表示在當前目錄下創建一個名為「test.db」的資料庫文件。
我們還使用了defer語句來確保資料庫連接在程序執行完畢後會被關閉。
二、創建數據表
創建數據表是使用SQLite進行數據操作的第一步,下面的代碼演示了如何在Go語言中創建數據表:
_, err = db.Exec(` CREATE TABLE IF NOT EXISTS users( id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, email TEXT ) `) if err != nil { log.Fatal(err) }
在上面的代碼中,我們使用了db.Exec()函數執行了一條SQL語句,該語句用於創建一個名為「users」的數據表。CREATE TABLE IF NOT EXISTS是一條常用的創建表語句,它會在表不存在的情況下創建該表。
該表包含四個欄位:id、name、age、email。其中id欄位是主鍵,並且使用AUTOINCREMENT關鍵字表示自增長。該語句中的注意事項:
- 使用反引號(`)括起來的SQL語句可以跨行編寫,這樣可以使代碼更加清晰易讀。
- 使用IF NOT EXISTS關鍵字可以避免在表已經存在時重複創建該表。
- 在SQLite中,主鍵和AUTOINCREMENT一起使用是一個常見的做法,它可以確保每個數據行的ID都是唯一的。
三、插入數據
插入數據是使用SQLite進行數據操作的重要步驟之一,下面的代碼演示了如何在Go語言中插入數據:
stmt, err := db.Prepare("INSERT INTO users(name, age, email) VALUES (?, ?, ?)") if err != nil { log.Fatal(err) } defer stmt.Close() _, err = stmt.Exec("Tom", 18, "tom@example.com") if err != nil { log.Fatal(err) }
在上面的代碼中,我們使用了db.Prepare()函數來準備一條SQL語句,該語句用於向「users」數據表中插入數據。
該語句包含三個佔位符「?」,它們分別表示待插入數據的name、age、email欄位。之後我們使用stmt.Exec()函數執行了一次插入數據操作,將name欄位設置為「Tom」,age欄位設置為18,email欄位設置為「tom@example.com」。
該函數返回兩個返回值,第一個返回值是插入的數據行數,第二個返回值是error類型,表示插入過程中的錯誤信息。在本例中,我們忽略了第一個返回值,而只處理了第二個返回值,使用log.Fatal()函數輸出相關信息。
四、查詢數據
查詢數據是使用SQLite進行數據操作的核心步驟之一,下面的代碼演示了如何在Go語言中查詢數據:
rows, err := db.Query("SELECT * FROM users") if err != nil { log.Fatal(err) } defer rows.Close() for rows.Next() { var id int var name string var age int var email string err = rows.Scan(&id, &name, &age, &email) if err != nil { log.Fatal(err) } fmt.Printf("id=%d, name=%s, age=%d, email=%s\n", id, name, age, email) } err = rows.Err() if err != nil { log.Fatal(err) }
在上面的代碼中,我們使用了db.Query()函數執行了一條SQL語句,該語句用於從「users」數據表中查詢所有數據行。
該函數返回一個帶有多個數據行的結果集,我們可以通過循環遍歷該結果集,逐一輸出每個數據行的內容。使用Scan()函數可以將數據行中的欄位值按照順序依次讀取出來,我們可以通過定義不同的變數來存儲不同的欄位值。
五、修改數據
修改數據是使用SQLite進行數據操作的常見步驟之一,下面的代碼演示了如何在Go語言中修改數據:
stmt, err := db.Prepare("UPDATE users SET age=? WHERE name=?") if err != nil { log.Fatal(err) } defer stmt.Close() _, err = stmt.Exec(19, "Tom") if err != nil { log.Fatal(err) }
在上面的代碼中,我們使用了db.Prepare()函數準備了一條SQL語句,該語句用於對「users」數據表中的數據進行修改。
UPDATE語句是一條常用的修改數據語句,它可以用於更新指定欄位的值。在該語句中,我們將name欄位等於「Tom」的數據行中的age欄位的值改為19。
在使用stmt.Exec()函數執行SQL語句時,我們也是採用了跟插入數據類似的方式,將待修改的值與佔位符一一對應。
六、刪除數據
刪除數據是使用SQLite進行數據操作的常見步驟之一,下面的代碼演示了如何在Go語言中刪除數據:
stmt, err := db.Prepare("DELETE FROM users WHERE id=?") if err != nil { log.Fatal(err) } defer stmt.Close() _, err = stmt.Exec(1) if err != nil { log.Fatal(err) }
在上面的代碼中,我們使用了db.Prepare()函數準備了一條SQL語句,該語句用於從「users」數據表中刪除指定ID的數據行。
DELETE語句是一條常用的刪除數據語句,它可以用於刪除指定數據行或整張數據表。在該語句中,我們將待刪除數據行的ID值設置為佔位符,使用stmt.Exec()函數執行SQL語句。
小結
本文從連接資料庫、創建數據表、插入數據、查詢數據、修改數據、刪除數據等多個方面講解了Go語言中的SQLite3資料庫操作。SQLite具有輕量級、開源、快速、可嵌入等特點,而Go語言則具有高效、簡潔、易用等特點,兩者結合起來可以提供高效、可靠的數據操作服務,為開發者帶來更加便捷的使用體驗。
原創文章,作者:ITAYN,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/333218.html