戈朗 | SQLite 无法创建数据库 -> 语法错误

Golang | SQLite cant create Database -> Syntax Error

我正在尝试使用 Golang 创建一个 SQLite 数据库,用于程序的本地安装。但我现在的问题是,由于某种原因它似乎起作用了,但我不知道为什么。它总是说,当我想用​​ SQL 查询(CREATE DATABASE [name])创建数据库时,它说语法无效。由于此查询似乎存在于 SQLite,因此我尝试仅创建 Table,但随后出现错误,提示我使用了未知数据库。我现在尝试了很多东西,但似乎没有任何效果。首先,我认为可能是因为查询是在数据库连接 created/open 之前执行的,所以发生了错误。但现在 100% 不是这种情况,因为我在执行 sql 查询之前尝试睡觉,什么都没有改变。当我 运行 这个代码时我得到的错误:

panic: near "DATABASE": syntax error

goroutine 1 [running]:
git.lambya.com/lucwol/coreflare/database.checkError(...)
        /home/lambya/Dev/piflare/coreflare/database/db.go:37
git.lambya.com/lucwol/coreflare/database.deploy()
        /home/lambya/Dev/piflare/coreflare/database/db.go:28 +0xdc
git.lambya.com/lucwol/coreflare/database.Connect({0x832adf, 0x9})
        /home/lambya/Dev/piflare/coreflare/database/db.go:23 +0xbb
main.main()
        /home/lambya/Dev/piflare/coreflare/main.go:102 +0x29
exit status 2

感谢支持:)

这是代码。

package database

import (
    "database/sql"
    "os"
    "time"

    _ "github.com/mattn/go-sqlite3"
)

var DB *sql.DB

func Connect(path string) {
    if _, err := os.Stat(path); err != nil {
        file, err := os.Create(path)
        checkError(err)
        file.Close()
    }
    db, err := sql.Open("sqlite3", path)
    checkError(err)
    time.Sleep(time.Millisecond * 2000)
    DB = db
    deploy()
}

func deploy() {
    query, err := DB.Prepare("CREATE DATABASE test")
    checkError(err)
    query.Exec()
    query2, err := DB.Prepare("CREATE TABLE test.user(id int NOT NULL AUTO_INCREMENT, name varchar(50), PRIMARY_KEY(id))")
    checkError(err)
    query2.Exec()
}

func checkError(err error) {
    if err != nil {
        panic(err)
    }
}

希望对您有所帮助

  1. 创建文件时用os.create(路径)创建的数据库名称

  2. AUTOINCREMENT 键是一个词

  3. 如果你想创建 user.id 主键,它应该是整数

    package main
    
    import (
        "database/sql"
        _ "github.com/mattn/go-sqlite3" // Import go-sqlite3 library
        "os"
        "time"
    )
    
    var DB *sql.DB
    
    func Connect(path string) {
        if _, err := os.Stat(path); err != nil {
            file, err := os.Create(path)
            checkError(err)
            file.Close()
        }
        db, err := sql.Open("sqlite3", path)
        checkError(err)
        time.Sleep(time.Millisecond * 2000)
        DB = db
        deploy()
    }
    func deploy() {
        query2, err := DB.Prepare("CREATE TABLE user(id integer NOT NULL PRIMARY KEY AUTOINCREMENT, name varchar(50) )")
        checkError(err)
        query2.Exec()
    }
    
    func checkError(err error) {
        if err != nil {
            panic(err)
        }
    }
    
    func main() {
        Connect("./sample.db")
    }