程序如下:
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 的哪個機制搞的鬼
如果有知道怎麼回事或者怎麼解決的歡迎留言喲~
♥ 喜 歡 請 點 贊 喲 ♥ |
(●ˇ∀ˇ●) |