= Go database/sql = The '''`database/sql`''' package defines a standardized API for interacting with [[SQL|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 [[Sqlite|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