參考:https://blog.csdn.net/wyyyh9458/article/details/83550505和https://www.v2ex.com/amp/t/618547
看代碼應該是謝大神寫的;另,我沒有修改 go.mod,類似:
`github.com/mattn/go-sqlite3 v2.0.0+incompatible // indirect` --> `github.com/mattn/go-sqlite3 v1.10.0`
直接在liteide中是可以編譯成功的。
代碼:
package main import ( "database/sql" "fmt" _ "github.com/mattn/go-sqlite3" ) func main() { fmt.Println("打開數據") db, err := sql.Open("sqlite3", "./foo.db") checkErr(err) fmt.Println("生成數據表") sql_table := ` CREATE TABLE IF NOT EXISTS "userinfo" ( "uid" INTEGER PRIMARY KEY AUTOINCREMENT, "username" VARCHAR(64) NULL, "departname" VARCHAR(64) NULL, "created" TIMESTAMP default (datetime('now', 'localtime')) ); CREATE TABLE IF NOT EXISTS "userdeatail" ( "uid" INT(10) NULL, "intro" TEXT NULL, "profile" TEXT NULL, PRIMARY KEY (uid) ); ` db.Exec(sql_table) //插入數據 fmt.Print("插入數據, ID=") stmt, err := db.Prepare("INSERT INTO userinfo(username, departname) values(?, ?)") checkErr(err) res, err := stmt.Exec("astaxie", "研發部門") checkErr(err) id, err := res.LastInsertId() checkErr(err) fmt.Println(id) //更新數據 fmt.Print("更新數據 ") stmt, err = db.Prepare("update userinfo set username=? where uid=?") checkErr(err) res, err = stmt.Exec("astaxieupdate", id) checkErr(err) affect, err := res.RowsAffected() checkErr(err) fmt.Println(affect) //查詢數據 fmt.Println("查詢數據") rows, err := db.Query("SELECT * FROM userinfo") checkErr(err) for rows.Next() { var uid int var username string var department string var created string err = rows.Scan(&uid, &username, &department, &created) checkErr(err) fmt.Println(uid, username, department, created) } //刪除數據 fmt.Println("刪除數據") 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) db.Close() } func checkErr(err error) { if err != nil { panic(err) } }
注意sqlite3共享鎖的問題:參考https://blog.csdn.net/LOVETEDA/article/details/82690498 golang操作sqlite時database is locked 的坑以及rows.Close()