Files
build-web-application-with-…/ru/05.3.md
2017-11-25 12:33:40 -03:00

114 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 5.3 SQLite
SQLite это открытая встраиваемая реляционная база данных. Она автономна, не требует конфигурации и является полноценной СУБД. Ее основные характеристики это: высокая портативность, простота использования, эффективность и надежость. В большинстве случаев вам нужен только двоичный файл SQLite для создания, подключения и эксплуатации базы данных. Если вы ищите встраиваемое решение СУБД, вам стоит рассмотреть SQLite. По сути SQLite является версией Access с открыты исходным кодом.
## Драйвера SQLite
В Go есть множество драйверов баз данных для SQLite, но многие из них не поддерживают стандарты интерфейсов `database/sql`.
- [https://github.com/mattn/go-sqlite3](https://github.com/mattn/go-sqlite3) поддерживает `database/sql`, базируется на cgo.
- [https://github.com/feyeleanor/gosqlite3](https://github.com/feyeleanor/gosqlite3) не поддерживает `database/sql`, базируется на cgo.
- [https://github.com/phf/go-sqlite3](https://github.com/phf/go-sqlite3) не поддерживает `database/sql`, базируется на cgo.
Первый драйвер является единственным, который поддерживает стандарты интерфейса `database/sql` в SQLite, поэтому я использую его в моих проектах. Поддержка стандартов позволит легко мигрировать на другую базу в будущем.
## Примеры
Создайте таблицу следующим запросом:
CREATE TABLE `userinfo` (
`uid` INTEGER PRIMARY KEY AUTOINCREMENT,
`username` VARCHAR(64) NULL,
`departname` VARCHAR(64) NULL,
`created` DATE NULL
);
Пример:
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./foo.db")
checkErr(err)
// вставка
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)
// обновление
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)
// запрос
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)
}
// удаление
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)
}
}
Вы наверняка заметили, что код очень похож на пример из предыдущего раздела, и мы изменили только имя зарегистрированного драйвера и вызвали `sql.Open` для соединения с SQLite по-другому.
Ниже дана ссылка на инструмент управления SQLite: [http://sqliteadmin.orbmu2k.de/](http://sqliteadmin.orbmu2k.de/)
## Ссылки
- [Содержание](preface.md)
- Предыдущий раздел: [MySQL](05.2.md)
- Следующий раздел: [PostgreSQL](05.4.md)