README.md
zombiezen.com/go/sqlite
This package provides a low-level Go interface to SQLite 3. It is a fork of
crawshaw.io/sqlite
that uses modernc.org/sqlite
, a CGo-free SQLite
package. It aims to be a mostly drop-in replacement for
crawshaw.io/sqlite
.
This package deliberately does not provide a database/sql
driver. See
David Crawshaw's rationale for an in-depth explanation. If you want to use
database/sql
with SQLite without CGo, use modernc.org/sqlite
directly.
Features
- Full SQLite functionality via
modernc.org/sqlite
, an automatically generated translation of the original C source code of SQLite into Go - Builds with
CGO_ENABLED=0
, allowing cross-compiling and data race detection - Allows access to SQLite-specific features like blob I/O and user-defined functions
- Includes a simple schema migration package
- Utilities for running embedded SQL scripts using the Go 1.16 embedding feature
- A
go fix
-like tool for migrating existing code usingcrawshaw.io/sqlite
- A simple REPL for debugging
Install
go get zombiezen.com/go/sqlite
While this library does not use CGo, make sure that you are building for one of the supported architectures.
Getting Started
import (
"fmt"
"zombiezen.com/go/sqlite"
"zombiezen.com/go/sqlite/sqlitex"
)
// ...
// Open an in-memory database.
conn, err := sqlite.OpenConn(":memory:", sqlite.OpenReadWrite)
if err != nil {
return err
}
defer conn.Close()
// Execute a query.
err = sqlitex.ExecTransient(conn, "SELECT 'hello, world';", func(stmt *sqlite.Stmt) error {
fmt.Println(stmt.ColumnText(0))
return nil
})
if err != nil {
return err
}
If you're creating a new application, see the package examples or the reference docs.
If you're looking to switch existing code that uses crawshaw.io/sqlite
, take
a look at the migration docs.