sqlite作为一个快速开发的数据库,理应被go支持,但是要在go里面使用sqlite,实际上是要下载sqlite的源代码编译的,当然,使用的时候不用手动编译,在linux中,gcc如果已经安装了,是不用担心的,但是在windows中,为了支持编译,必须使用mingw64
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 封装
将需要的业务封装,写成多个函数,具体看下面的代码
复制可以用
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()
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)