纯golang+sqlite3 CRUD
参考: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()