为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
呼如林 2022-12-13 10:38:10
我正在尝试使用 Golang 创建一个 SQLite 数据库,用于程序的本地安装。但我现在的问题是,由于某种原因它似乎起作用了,但我不知道为什么。它总是说,当我想用 SQL 查询 (CREATE DATABASE [name]) 创建数据库时,它说语法无效。因为这个查询似乎存在于 SQLite 中,所以我只尝试创建表,但后来我得到一个错误,说我使用了一个未知的数据库。我现在尝试了很多东西,但似乎没有任何效果。首先,我认为可能是因为在创建/打开数据库连接之前执行了查询而发生了错误。但现在 100% 不是这种情况,因为我尝试在执行 sql 查询之前睡觉,什么都没有改变。运行此代码时出现的错误:panic: near "DATABASE": syntax errorgoroutine 1 [running]:git.lambya.com/lucwol/coreflare/database.checkError(...)        /home/lambya/Dev/piflare/coreflare/database/db.go:37git.lambya.com/lucwol/coreflare/database.deploy()        /home/lambya/Dev/piflare/coreflare/database/db.go:28 +0xdcgit.lambya.com/lucwol/coreflare/database.Connect({0x832adf, 0x9})        /home/lambya/Dev/piflare/coreflare/database/db.go:23 +0xbbmain.main()        /home/lambya/Dev/piflare/coreflare/main.go:102 +0x29exit status 2感谢您的支持 :)继承人的代码。package databaseimport (    "database/sql"    "os"    "time"    _ "github.com/mattn/go-sqlite3")var DB *sql.DBfunc 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 回答

?
四季花海

TA贡献1811条经验 获得超5个赞

希望这可以帮助

  1. 创建文件本身时使用 os.create(path) 创建的数据库名称

  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")

}


查看完整回答
反对 回复 2022-12-13
  • 1 回答
  • 0 关注
  • 237 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号