Closed1

github.com/ncruces/go-sqlite3でSELECT sqlite_version();

黒ヰ樹黒ヰ樹

https://github.com/ncruces/go-sqlite3

なかったので
TODO: あとで記事にしたい

package main

import (
	"fmt"
	"log"

	"github.com/ncruces/go-sqlite3"
	_ "github.com/ncruces/go-sqlite3/embed"
)

func main() {
	db, err := sqlite3.Open(":memory:")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	stmt, _, err := db.Prepare("SELECT sqlite_version()")
	if err != nil {
		log.Fatal(err)
	}
	defer stmt.Close()

	for stmt.Step() {
		fmt.Println(stmt.ColumnText(0))
	}
}

Conn構造体使ったやつ

  • Pros: SQL文以外で使えるSQLiteの機能やwazeroのオプションが使える
  • Cons: ソースコードや公式ドキュメント以外の参考資料がない
package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/ncruces/go-sqlite3/driver"
	_ "github.com/ncruces/go-sqlite3/embed"
)

func main() {
	db, err := sql.Open("sqlite3", ":memory:")
	if err != nil {
		log.Fatal(err)
	}
	defer db.Close()

	var v string
	db.QueryRow("SELECT sqlite_version()").Scan(&v)
	fmt.Println(v)
}

database/sql使ったやつ

  • Pros: 公式以外のソースコードやドキュメントが豊富で書きやすい
  • Cons: SQL文以外で使えるSQLiteの機能やwazeroのオプションが使えない
package main

import (
	"context"
	"database/sql"
	"fmt"
	"log"

	_ "github.com/ncruces/go-sqlite3/driver"
	_ "github.com/ncruces/go-sqlite3/embed"
	"github.com/uptrace/bun"
	"github.com/uptrace/bun/dialect/sqlitedialect"
)

func main() {
	ctx := context.Background()

	sqldb, err := sql.Open("sqlite3", ":memory:")
	if err != nil {
		log.Fatal(err)
	}
	db := bun.NewDB(sqldb, sqlitedialect.New())

	var v string
	if err := db.NewSelect().ColumnExpr("sqlite_version()").Scan(ctx, &v); err != nil {
		log.Fatal(err)
	}
	fmt.Println(v)
}

Bun使ったやつ
Pros: ORMで書きやすい
Cons: SQL文以外で使えるSQLiteの機能やwazeroのオプションが使えない

このスクラップは2025/01/19にクローズされました