Skip to content

@sqlite

Import this module with import @sqlite.

SQLite database access for persistent storage.

Function Signature Description
open (path string) -> (Database, Error) Open or create a SQLite database
close (db Database) Close database connection
exec (db Database, sql string) -> (bool, Error) Execute a SQL statement (no rows returned)
exec_params (db Database, sql string, params [string]) -> (bool, Error) Execute a parameterized SQL statement; bind values for ? placeholders
query (db Database, sql string) -> ([map[string:string]], Error) Execute a SELECT query, returns array of row maps
query_params (db Database, sql string, params [string]) -> ([map[string:string]], Error) Execute a parameterized SELECT query; bind values for ? placeholders

open, exec, exec_params, query, and query_params are fallible: single-variable assignment is a compile-time error (E3089); the result must be destructured (mut v, err = ... or mut v, _ = ...).

For any user-supplied value, use exec_params or query_params with ? placeholders rather than interpolating into the SQL string; parameter binding prevents SQL injection.

import @sqlite
do main() {
mut db, err = sqlite.open("myapp.db")
if err != nil { println("open failed: ${err}") }
mut created, _ = sqlite.exec(db, "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)")
mut inserted, _ = sqlite.exec(db, "INSERT INTO users (name) VALUES ('Alice')")
mut rows, query_err = sqlite.query(db, "SELECT * FROM users")
if query_err != nil { println("query failed: ${query_err}") }
for_each row in rows {
println(row["name"])
}
sqlite.close(db)
}