Go——Sqlite數據庫增刪改查基本操作

程序如下:

package main

//利用_可以完成包的只初始化,不引用,僅僅是是希望它執行init()函數
import (
	"database/sql"
	"fmt"
	_ "github.com/mattn/go-sqlite3"
	"time"
)

func main() {
	//打開數據庫 test.db,如果不存在,則創建
	//【注意:這裏創建的數據庫的名字是 test.db,不是 test】
	db, err := sql.Open("sqlite3", "./test.db")
	checkErr(err)


	//創建表 userinfo
	sqlTable := `
    CREATE TABLE IF NOT EXISTS userinfo(
        uid INTEGER PRIMARY KEY AUTOINCREMENT,
        username VARCHAR(64) NULL,
        department VARCHAR(64) NULL,
        created DATE NULL
    );
    `

	db.Exec(sqlTable)

	//插入
	stmt, err := db.Prepare("INSERT INTO userinfo(username, department, created) values(?,?,?)")
	checkErr(err)
	createdNow :=time.Now()
	res, err := stmt.Exec("wyj", "軟件開發", createdNow)
	checkErr(err)
	id, err := res.LastInsertId()
	checkErr(err)
	fmt.Println("剛剛新增數據的ID是:", id)

	//更新
	stmt, err = db.Prepare("update userinfo set username=? where uid=?")
	checkErr(err)

	res, err = stmt.Exec("wyj_new", id)
	checkErr(err)

	affect, err := res.RowsAffected()
	checkErr(err)

	fmt.Println("更新操作影響的行數爲:", affect)

	//查找所有
	rows, err := db.Query("SELECT * FROM userinfo")
	checkErr(err)
	var uid int
	var username string
	var department string
	var created time.Time

	//Next() 迭代查詢數據
	for rows.Next() {
		//Scan() 讀取每一行的值
		err = rows.Scan(&uid, &username, &department, &created)
		checkErr(err)
		fmt.Println("userinfo 數據表中所有數據信息如下:\n", uid, username, department, created)
	}

	//defer stmt.Close()
	//defer rows.Close()

	//刪除
	stmt, err = db.Prepare("delete from userinfo where uid=?")
	checkErr(err)

	res, err = stmt.Exec(id)
	checkErr(err)

	affect, err = res.RowsAffected()
	checkErr(err)

	fmt.Println("刪除操作影響的行數爲:", affect)

	stmt.Close()
	rows.Close()

	//刪除數據庫表,此處可無
	_, err = db.Exec("DROP TABLE userinfo")
	fmt.Println(err)
	checkErr(err)

	defer db.Close()
}
func checkErr(err error) {
	if err != nil {
		panic(err)
	}
}

運行結果如下:

在這裏插入圖片描述

發現一個問題:有時候運行此程序打印輸出不全面,會有部分信息沒打印出來!
不知道是 go 的哪個機制搞的鬼
如果有知道怎麼回事或者怎麼解決的歡迎留言喲~

♥ 喜 歡 請 點 贊 喲 ♥
(●ˇ∀ˇ●)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章