SQLite es una base de datos relacional, open source, tiene su propio contenedor, zero-configuration (no necesita configuración) y con un motor de base de datos con soporte para respaldo. Tiene como característicamente ser muy portable, sencilla de usar, compacta, eficiente y segura. En la mayoría de los casos, únicamente va a necesitar el archivo binaria de SQLite para crearla, conectar y operar la base de datos. Si estas buscando una solución de una base de datos embebida, vale la pena considerar SQLite. Podría decir que SQLite es una versión open source de Access.
Hay muchos drivers de base de datos para SQLite en Go, pero mucho de ellos no soportan la interfaz estándar database/sql
.
- https://github.com/mattn/go-sqlite3 soporta
database/sql
, basado en cgo. - https://github.com/feyeleanor/gosqlite3 no soporta
database/sql
, basado en cgo. - https://github.com/phf/go-sqlite3 no soporta
database/sql
, basado en cgo.
El primer driver es el único que soporta la interfaz estándar database/sql
en los drivers de SQLite, por eso utilice este para mi proyecto y va a ser sencillo migrar el código en el futuro.
El SQL para crearla es el siguiente:
CREATE TABLE `userinfo` (
`uid` INTEGER PRIMARY KEY AUTOINCREMENT,
`username` VARCHAR(64) NULL,
`departname` VARCHAR(64) NULL,
`created` DATE NULL
);
Un ejemplo:
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./foo.db")
checkErr(err)
// insert
stmt, err := db.Prepare("INSERT INTO userinfo(username, departname, created) values(?,?,?)")
checkErr(err)
res, err := stmt.Exec("astaxie", "研发部门", "2012-12-09")
checkErr(err)
id, err := res.LastInsertId()
checkErr(err)
fmt.Println(id)
// update
stmt, err = db.Prepare("update userinfo set username=? where uid=?")
checkErr(err)
res, err = stmt.Exec("astaxieupdate", id)
checkErr(err)
affect, err := res.RowsAffected()
checkErr(err)
fmt.Println(affect)
// query
rows, err := db.Query("SELECT * FROM userinfo")
checkErr(err)
for rows.Next() {
var uid int
var username string
var department string
var created string
err = rows.Scan(&uid, &username, &department, &created)
checkErr(err)
fmt.Println(uid)
fmt.Println(username)
fmt.Println(department)
fmt.Println(created)
}
// delete
stmt, err = db.Prepare("delete from userinfo where uid=?")
checkErr(err)
res, err = stmt.Exec(id)
checkErr(err)
affect, err = res.RowsAffected()
checkErr(err)
fmt.Println(affect)
db.Close()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
Puede notar que el código es casi igual al de la sección anterior, y que sólo cambió el nombre del controlador registrado, y la llamada a sql.Open
para conectarse a SQLite de una manera diferente.
Hay una herramienta para la gestión de SQLite disponible: http://sqliteadmin.orbmu2k.de/
- Indice
- Sección anterior: MySQL
- Siguiente sección: PostgreSQL