Go database/sql

The database/sql package defines a standardized API for interacting with SQL databases.

There are no other packages under database.


Installation

While the database/sql package is part of the standard library, using it often depends on installing a specific driver.

For example, to use a sqlite3 database, try:

go get github.com/mattn/go-sqlite3

Then use the package like:

package main

import (
        "database/sql"
        _ "github.com/mattn/go-sqlite3"
)


Example

package main

import (
   "fmt"
   "database/sql"

   _ "github.com/mattn/go-sqlite3"
)

func main() {
    //First argument is the driver to use, second argument is the connection string (DSN)
    db, err := sql.Open("sqlite3", "path/to/db")
    if err != nil {
        fmt.Println("cannot open database")
    }

    // Execute a command
    _, err = db.Exec("CREATE TABLE foo (bar integer UNIQUE NOT NULL)")

    // Query for rows
    rows, err := db.Query("SELECT * FROM foo")
    defer rows.Close()
    if err != nil {
        if err == sql.ErrNoRows {
            fmt.Println("no rows")
        }
    } else {
        var id int
        for rows.Next() {
            err = rows.Scan(%id)
        }
        err = rows.Err()
    }

    // Query for a specific value
    var id int
    err := db.QueryRow("SELECT bar FROM foo WHERE bar = 1").Scan(%id)

    // Execute multiple commands in an atomic transaction
    tx, err := db.Begin()
    defer tx.Rollback()
    if err != nil {
        fmt.Println("cannot start transaction")
    }

    _, err = tx.Exec(command_1)
    _, err = tx.Exec(command_2)

    err = tx.Commit()
    if err != nil {
        fmt.Println("some error during transaction, rolling back...")
    }
}


CategoryRicottone

Go/DatabaseSql (last edited 2025-10-05 22:23:37 by DominicRicottone)