SQLite Go: Inserting Data

Summary: in this tutorial, you will learn how to insert data into a table of a SQLite database in Go.

How to insert a row into a table

To insert a new row into a table, you follow these steps:

First, connect to the SQLite database file:

db, err := sql.Open("sqlite", filename)Code language: Go (go)

Second, construct an INSERT statement:

sql := "INSERT INTO table...";Code language: Go (go)

If you want to pass data to the INSERT statement, you can use the ? placeholder. For example:

INSERT INTO countries(name, population, area)
VALUES(?, ?, ?)Code language: Go (go)

Third, call the Exec() method of the DB struct’s instance to execute the CREATE TABLE statement:

result, err = db.Exec(sql)Code language: Go (go)

If the INSERT statement includes placeholders (?), you need to pass the corresponding values in the Exec() method:

result, err = db.Exec(sql, value1, value2, ...)Code language: Go (go)

When executing the INSERT statement, the program will substitute the placeholders with the value1, value2, …

The result is an instance of the struct that implements the Result interface. The Result interface has two methods:

Inserting a row into the countries table

Step 1. Define a new struct called Country in the country.go file:

type Country struct {
    Id int
    Name string
    Population int
    Area int
}Code language: Go (go)

Step 2. Define an Insert() function that inserts a new country into the countries table:

func Insert(db *sql.DB, c *Country) (int64, error) {
    sql := `INSERT INTO countries (name, population, area) 
            VALUES (?, ?, ?);`
    result, err := db.Exec(sql, c.Name, c.Population, c.Area)
    if err != nil {
        return 0, err
    }
    return result.LastInsertId()
}Code language: Go (go)

How it works.

First, construct an INSERT statement that inserts a row into the countries table:

sql := `INSERT INTO countries (name, population, area) 
            VALUES (?, ?, ?);`Code language: Go (go)

Second, call the Exec() method to execute the INSERT statement:

result, err := db.Exec(sql, c.Name, c.Population, c.Area)Code language: Go (go)

Third, return 0 and Error if an error occurs:

if err != nil {
   return 0, err
}Code language: Go (go)

Finally, return the last inserted id and error by calling the LastInsertId() method:

return result.LastInsertId()Code language: Go (go)

Step 3. Call the Insert() function in the main function to insert a new country into the countries table:

package main

import (
    "database/sql"
    "fmt"

    _ "github.com/glebarez/go-sqlite"
)

func main() {
    // connect to the SQLite database
    db, err := sql.Open("sqlite", "./my.db?_pragma=foreign_keys(1)")
    if err != nil {
        fmt.Println(err)
        return
    }

    defer db.Close()

    // create a new country
    country := &Country{
        Name: "United States", 
        Population: 329064917, 
        Area: 9826675,
    }

    // insert the country
    countryId, err := Insert(db, country)
    if err != nil {
        fmt.Println(err)
        return
    }
    
    // print the inserted country
    fmt.Printf(
        "The country %s was inserted with ID:%d\n",
        country.Name,
        countryId,
    )
}Code language: Go (go)

Step 4. Run the Go program

go run main.go country.goCode language: Go (go)

Output:

The country United States was inserted with ID:1Code language: Go (go)

Verifying data

Step 1. Open your terminal and navigate to the project directory.

Step 2. Connect to the my.db using the sqlite3 shell:

sqlite3 my.dbCode language: Shell Session (shell)

Step 2. Format the query output:

.header on
.mode column
.nullvalue nullCode language: Go (go)

Step 3. Retrieve data from the countries table:

countriesCode language: Go (go)

Output:

id  name           population   area
--  -------------  -----------  ---------
1   United States  329064917    9826675Code language: Go (go)

The output shows the that program has inserted the country successfully.

Step 4. Quit the sqlite3 tool:

.quitCode language: Go (go)

Summary

  • Call the Exec() method of the DB struct to execute an INSERT statement to insert a new row into a table.
Was this tutorial helpful ?