用go实例化一个sqlite数据库?

时间:2016-03-15 19:42:55

标签: go sqlite

我从我的应用程序中提取了以下代码。我正在尝试创建一个新目录,在其中放入一个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()
}

2 个答案:

答案 0 :(得分:7)

您没有关闭数据库,因此更改不会刷新到数据库文件。

确保执行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)
}

答案 1 :(得分:2)

您需要使用函数Exec而不是Query来创建表格。看一下这些功能的文档:

func (*DB) Query

Query executes a query that returns rows, typically a SELECT. The args are for any placeholder parameters in the query.

func (*DB) Exec

Exec executes a query without returning any rows. The args are for any placeholder parameters in the query.