go中使用sqlite
Posted qianbo_insist
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go中使用sqlite相关的知识,希望对你有一定的参考价值。
1 安装mingw64
1.1 下载mingw
sqlite作为一个快速开发的数据库,理应被go支持,但是要在go里面使用sqlite,实际上是要下载sqlite的源代码编译的,当然,使用的时候不用手动编译,在linux中,gcc如果已经安装了,是不用担心的,但是在windows中,为了支持编译,必须使用mingw64
注意在mingw64安装过程中选择x64。
1.2 path路径设置
注意在windows中必须在path路径中增加mingw64的bin目录,以便于让gcc能够找到。
2 使用sqlite
2.1 创建表
在程序执行开头创建数据表
db, err := sql.Open(“sqlite3”, “./data.db”)
defer db.Close()
checkErr(err)
db.Exec(sql_table) //执行数据表
为了查询的效率,一般在需要索引的地方加上索引,必须这次的数据中,我们给Deviceid 加上了索引
CREATE INDEX deviceid_idx ON file_hash_list (deviceid);
2.2 创建数据结构
type Data0 struct
id int
Deviceid string
Sdnn int
Average int
Rmssd int
Pnn50 float32
Timestart string
2.3 增删改查 adus
add delete update select 封装
将需要的业务封装,写成多个函数,具体看下面的代码
2.4 show me the code
复制可以用
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
var sql_table = `CREATE TABLE if not exists "data_1" (
"id" INTEGER PRIMARY KEY AUTOINCREMENT,
"deviceid" VARCHAR(64) NULL,
"sdnn" INTEGER,
"average" INTEGER,
"rmssd" INTEGER,
"pnn50" float,
"timestart" TIMESTAMP default (datetime('now', 'localtime'))
);
CREATE INDEX deviceid_idx ON file_hash_list (deviceid);
`
type Data0 struct
id int
Deviceid string
Sdnn int
Average int
Rmssd int
Pnn50 float32
Timestart string
func checkErr(err error)
if err != nil
panic(err)
func insert(db *sql.DB, did string, ssdn int, average int, rmssd int, pnn50 float32, timestart string) int64
stmt, err := db.Prepare("INSERT INTO data_1(deviceid, sdnn,average,rmssd,pnn50,timestart) values(?,?,?,?,?,?)")
checkErr(err)
res, err := stmt.Exec(did, ssdn, average, rmssd, pnn50, timestart)
checkErr(err)
id, err := res.LastInsertId()
checkErr(err)
return id
func update_average(db *sql.DB, deviceid string, average int) int64
stmt, err := db.Prepare("update data_1 set deviceid=? where deviceid=?")
checkErr(err)
res, err := stmt.Exec(average, deviceid)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
return affect
func select_all(db *sql.DB, data0 *Data0)
rows, err := db.Query("SELECT * FROM data_1")
checkErr(err)
for rows.Next()
err = rows.Scan(&data0.id, &data0.Deviceid, &data0.Sdnn, &data0.Average,
&data0.Rmssd, &data0.Pnn50, &data0.Timestart)
checkErr(err)
func delete_data(db *sql.DB, id int) int64
stmt, err := db.Prepare("delete from data_1 where id=?")
checkErr(err)
res, err1 := stmt.Exec(id)
checkErr(err1)
affect, err2 := res.RowsAffected()
checkErr(err2)
return affect
func main()
db, err := sql.Open("sqlite3", "./data.db")
defer db.Close()
checkErr(err)
db.Exec(sql_table) //执行数据表
id := insert(db, "qianbo", 15, 70, 20, 0.2, "2021-01-09 07:05:22")
fmt.Println("insert:", id)
id = insert(db, "guanzhi", 16, 71, 25, 0.3, "2021-12-09 07:05:22")
fmt.Println("insert:", id)
affected := update_average(db, "qianbo", 67)
fmt.Println("update:", affected)
var data0 Data0
select_all(db, &data0)
fmt.Println(id, data0.Deviceid)
db.Close()
以上是关于go中使用sqlite的主要内容,如果未能解决你的问题,请参考以下文章
如何使用github.com/mattn/go-sqlite3对Google Cloud VM交叉编译Go软件包?
SQLite3 极简教程 & Go 使用 SQLite 内存模式操作数据结构