package db import ( "fmt" // 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。 "github.com/jmoiron/sqlx" _ "github.com/logoove/sqlite" ) var db *sqlx.DB var err error func Init() { // fmt.Printf("hey,I am initilize function in SqliteDb\n")s // // Open() 函数指定驱动名称和数据源名称 db, err = sqlx.Open("sqlite", "ups.db") if err != nil { fmt.Printf("Database creation failed: %v\n", err) return } // 调用db.Close() 函数,确保关闭数据库并阻止启动新的查询 // defer db.Close() // connectDB() } // 连接数据库 func connectDB() { var version string // QueryRow() 执行查询,返回版本号 err = db.QueryRow("SELECT SQLITE_VERSION()").Scan(&version) if err != nil { fmt.Printf("Database creation failed: %v\n", err) return } // 连接成功,打印出"database connected:版本号" fmt.Printf("Database creation successful: %v\n", version) } // 创建数据库表 func CreateTable() { // 建表语句 sts := ` CREATE TABLE f_info ( id INTEGER PRIMARY KEY NOT NULL, fname TEXT NOT NULL, fpath TEXT NOT NULL, fpbs TEXT NOT NULL, fhash TEXT NOT NULL );` // 使用db.Exec() 函数来执行 SQL 语句 _, err = db.Exec(sts) if err != nil { fmt.Printf("Failed to create database table: %v\n", err) return } fmt.Printf("Successfully created database table! \n") } // 插入数据 func InsertStf(sf StFileInfo) { // 插入语句 res, err := db.Exec("INSERT INTO f_info(fname, fpath,fhash) VALUES(?,?,?)", sf.Fname, sf.Fpath, sf.Fhash) if err != nil { fmt.Printf("Insert data failed: %v\n", err) return } // 获取自增ID lastInsertId, _ := res.LastInsertId() fmt.Printf("Successfully inserted data, lastInsertId = %v\n", lastInsertId) } // 查询数据 func Fquery(fpbs string) (stlist []StFileInfo) { // 结果重量集合 stlist = make([]StFileInfo, 0) // 查询语句 rows, err := db.Query("SELECT id,fname,fpath,fhash FROM f_info WHERE fpbs = ?", fpbs) // if err != nil { fmt.Printf("Failed to query data: %v\n", err) return } // FOR loop for rows.Next() { // var weight float64 var st StFileInfo err = rows.Scan(&st.Id, &st.Fname, &st.Fpath, &st.Fhash) if err != nil { fmt.Printf("Failed to read data: %v\n", err) continue } stlist = append(stlist, st) } return stlist }