Skip to content

Latest commit

 

History

History
113 lines (82 loc) · 3.44 KB

File metadata and controls

113 lines (82 loc) · 3.44 KB

5.3 SQLite

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.

Drivers de SQLite

Hay muchos drivers de base de datos para SQLite en Go, pero mucho de ellos no soportan la interfaz estándar database/sql.

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.

Ejemplos

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/

Enlaces