You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
2.9 KiB
132 lines
2.9 KiB
package db
|
|
|
|
import (
|
|
"fmt"
|
|
"database/sql"
|
|
|
|
// 导入包,导入前缀为下划线,则init函数被执行,然后注册驱动。
|
|
"github.com/jmoiron/sqlx"
|
|
_ "github.com/logoove/sqlite"
|
|
)
|
|
|
|
var db *sqlx.DB
|
|
var err error
|
|
|
|
// 数据库错误常量
|
|
var ErrDbNotInit = fmt.Errorf("database not initialized")
|
|
|
|
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()
|
|
// 创建必要的表
|
|
CreateTable()
|
|
// 创建用户表
|
|
createUserTableIfNotExists()
|
|
}
|
|
|
|
// 连接数据库
|
|
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
|
|
}
|
|
}
|
|
|
|
// GetSqliteDB 获取数据库连接
|
|
func GetSqliteDB() *sql.DB {
|
|
if db == nil {
|
|
return nil
|
|
}
|
|
return db.DB
|
|
}
|
|
|
|
// createUserTableIfNotExists 创建用户表(如果不存在)
|
|
func createUserTableIfNotExists() {
|
|
sqlDB := GetSqliteDB()
|
|
if sqlDB == nil {
|
|
fmt.Printf("Failed to get database connection for user table creation\n")
|
|
return
|
|
}
|
|
|
|
err := CreateUserTable(sqlDB)
|
|
if err != nil {
|
|
fmt.Printf("Failed to create user table: %v\n", err)
|
|
return
|
|
}
|
|
|
|
fmt.Printf("User table created successfully\n")
|
|
}
|
|
|
|
// 创建数据库表
|
|
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
|
|
}
|
|
|