我从我的应用程序中提取了下面的代码.我正在尝试创建一个新目录,在其中放入一个sqlite数据库,然后在数据库中创建一个表.
目前,它创建了目录,db存在的文件,并且运行时没有任何错误.但是,db文件为空.我无法弄清楚为什么它是空的.
有谁知道如何修改此代码,以便内容保留在数据库中?
package main
import (
"os"
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
os.MkdirAll("./data/1234", 0755)
os.Create("./data/1234/data.db")
db, err := sql.Open("sqlite3", "./data/1234/data.db")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
_, err = db.Query("CREATE TABLE `customers` (`till_id` INTEGER PRIMARY KEY AUTOINCREMENT, `client_id` VARCHAR(64) NULL, `first_name` VARCHAR(255) NOT NULL, `last_name` VARCHAR(255) NOT NULL, `guid` VARCHAR(255) NULL, `dob` DATETIME NULL, `type` VARCHAR(1))")
if err != nil {
fmt.Println(err)
os.Exit(1)
}
db.Close()
}
Run Code Online (Sandbox Code Playgroud)
您没有关闭数据库,因此更改不会刷新到数据库文件.
确保你执行db.Close().
然后,您需要使用该Exec方法,而不是Query修改数据库.
_, err = db.Exec("CREATE TABLE `customers` (`till_id` INTEGER PRIMARY KEY AUTOINCREMENT, `client_id` VARCHAR(64) NULL, `first_name` VARCHAR(255) NOT NULL, `last_name` VARCHAR(255) NOT NULL, `guid` VARCHAR(255) NULL, `dob` DATETIME NULL, `type` VARCHAR(1))")
if err != nil {
log.Fatal(err)
}
Run Code Online (Sandbox Code Playgroud)