herixon
@herixon (herixon)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

golangのsqlite3の環境構築について

解決したいこと

Golangでのsqlite3の操作ができないため、どうにか操作できるようにしたい。

windows10環境で
golang初心者が、VS code にてsqlite3を操作しようとしています。
コマンドプロンプトにて

go get github.com/mattn/go-sqlite3

のコマンドを入力したところ

go: added github.com/mattn/go-sqlite3 v1.14.14

という表示が出たため、github.com/mattn/go-sqlite3のコマンドは成功したと思われます。

しかし教材の通りに、コードを記述したところ、下記のエラーがでます。

.go
PS C:\go_local\test_ser> go run main.go
2022/08/11 14:06:13 unable to open database file: The system cannot find the file specified.
exit status 1

該当するソースコード

下記のコードを試しました。

.go
package main

import (
	"database/sql"
	"log"

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

var Db *sql.DB

func main() {
	Db, _ := sql.Open("sqlite3", "/example.sql")

	defer Db.Close()

	cmd := `CREATE TABLE IF NOT EXISTS persons(
			name STRING,
			age INT)`
	_, err := Db.Exec(cmd)

	if err != nil {
		log.Fatalln(err)
	}
}

以上についてご教授いただけますと幸いです。

0

1Answer

It is about function sql.Open.

func sql.Open(driverName string, dataSourceName string) (*sql.DB, error)

Your dataSourceName parameter is incorrect.

/example.sql is a valid path on linux not windows. And if you do so in linux, it may be still incorrect because of permission. It works if you simply change /example.sql to ./example.sql on linux.

This is my output on linux. It works as expected after I change /example.sql to ./example.sql.

2022-08-11_08-53.png

As for windows, (since I don't use windows) it maybe something like C://xxx

Or just open a in-memory DB like this (This should work well on linux and windows).

db, err := sql.Open("sqlite3", ":memory:")
1Like

Comments

  1. @herixon

    Questioner

    Thanks for your advice!

Your answer might help someone💌