golangでSQLite3を使う情報は多いのだけれど,
Windowsで使うとなると一気に情報が減ってしまう.
事前準備
ちょっと面倒ですが,まずはgccが必要です.
以下からダウンロードします.
msys2なんかでよく使うMinGWではダメっぽいです.
(msys2使ってるので良い方法があるなら知りたいです)
ライブラリ作者のmattnさんもgolangのビルドにはmsys2使ってないっぽいですね.
github - issues -
そういうわけでcmd.exeでgo getします.
C:\Users\Twinbird>go get github.com/mattn/go-sqlite3
これで準備はOKです.
サンプルコード
見た方が早いですね.
package main import ( "os" "database/sql" _ "github.com/mattn/go-sqlite3" ) func main() { dbfile := "./test.db" os.Remove(dbfile) db, err := sql.Open("sqlite3", dbfile) if err != nil { panic(err) } // 単発で実行 _, err = db.Exec(`CREATE TABLE "messages" ("id" INTEGER PRIMARY KEY AUTOINCREMENT, "msg" VARCHAR(255))`) if err != nil { panic(err) } // 単発で実行 _, err = db.Exec(` INSERT INTO "messages" ("msg") VALUES(?)`, "こんにちは", ) if err != nil { panic(err) } // プリペアステートメント stmt, err := db.Prepare(`INSERT INTO "messages" ("msg") VALUES(?)`) if err != nil { panic(err) } if _, err = stmt.Exec("世界"); err != nil { panic(err) } if _, err = stmt.Exec("Hello"); err != nil { panic(err) } if _, err = stmt.Exec("World"); err != nil { panic(err) } stmt.Close() db.Close() }
ビルド
これもcmd.exeでやりましょう.
C:\Users\Twinbird\samples>go build
実行と確認
実行はmsys2環境でもできます.
SQLiteで確認してみましょう.
SQLite version 3.10.0 2016-01-06 11:01:07 Enter ".help" for usage hints. sqlite> .tables messages sqlite> select * from messages; 1|こんにちは 2|世界 3|Hello 4|World
うまくいきました.