mirror of
https://github.com/jbranchaud/til
synced 2026-01-03 15:18:01 +00:00
51 lines
1.3 KiB
Markdown
51 lines
1.3 KiB
Markdown
# Connect To A SQLite Database
|
|
|
|
Using the `database/sql` module and the `github.com/mattn/go-sqlite3` package,
|
|
we can connect to a SQLite database and run some queries. In my case, I have a
|
|
SQLite connection string exported to my environment, so I can access that with
|
|
`os.Getenv`. It's a local SQLite file, `./test.db`.
|
|
|
|
Calling `sql.Open`, I'm able to connect with a SQLite3 driver to the database
|
|
at that connection string. The `setupDatabase` function returns that database
|
|
connection pointer. Things like `Exec` and `QueryRow` can be called on `db`. I
|
|
also need to make sure I close the connection to the database with a `defer`.
|
|
|
|
Here is a full example of connecting to a local SQLite database and inserting a
|
|
record:
|
|
|
|
```go
|
|
package main
|
|
|
|
import (
|
|
"database/sql"
|
|
"fmt"
|
|
"os"
|
|
|
|
_ "github.com/mattn/go-sqlite3"
|
|
)
|
|
|
|
func setupDatabase() *sql.DB {
|
|
databaseString := os.Getenv("GOOSE_DBSTRING")
|
|
if len(databaseString) == 0 {
|
|
fmt.Println("Error retrieving `GOOSE_DBSTRING` from env")
|
|
os.Exit(1)
|
|
}
|
|
db, err := sql.Open("sqlite3", databaseString)
|
|
if err != nil {
|
|
fmt.Printf("Error opening database: %v\n", err)
|
|
os.Exit(1)
|
|
}
|
|
|
|
return db
|
|
}
|
|
|
|
func main() {
|
|
db := setupDatabase()
|
|
defer db.Close()
|
|
|
|
sql := `insert into users (name) values (?);`
|
|
|
|
db.Exec(sql, "Josh")
|
|
}
|
|
```
|