使用Golang操作SQLite3数据库
发表时间: 2019-06-10 20:45
最近在做软路由,需要保存一些设置,一开始打算选择json来保存,但是在开发的过程中发现很多数据之间关联比较多,故打算选择一个数据库来保存。
SQLite3是一个轻型的嵌入式数据库引擎,占用资源非常低,专门用于移动设备上进行适量的数据存取,它只是一个文件,不需要服务器进程,所有的操作都来自于程序本身。
Go操作SQLite3数据库,需要使用
github.com/mattn/go-sqlite3这个库,在使用SQLite3创建数据库连接,当我们指定的数据库文件不存在的时候连接对象会自动创建数据库文件;如果数据库文件已近存在,则连接对象不会再创建数据库文件,而是直接打开该数据库文件。
先引入sql与sqlite3库
import ( "database/sql" "fmt" _ "github.com/mattn/go-sqlite3")
var db *sql.DBfunc ConnectDB() error { var err error db, err = sql.Open("sqlite3", "./router.db") if err != nil { return err } if err = db.Ping(); err != nil { return err } return nil}
写SQL语句时,不区分大小写,每条语句后需加;结尾。
package mainimport ( "database/sql" "fmt" _ "github.com/mattn/go-sqlite3")func main() { db, err := sql.Open("sqlite3", "./foo.db") checkErr(err) //插入数据 stmt, err := db.Prepare("INSERT INTO userinfo(username, departname, created) values(?,?,?)") checkErr(err) res, err := stmt.Exec("astaxie", "研发部门", "2012-12-09") checkErr(err) id, err := res.LastInsertId() checkErr(err) fmt.Println(id) //更新数据 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) //查询数据 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) fmt.Println(username) fmt.Println(department) fmt.Println(created) } //删除数据 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) }}