W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
SQLite 是一個(gè)開源的嵌入式關(guān)系數(shù)據(jù)庫(kù),實(shí)現(xiàn)自包容、零配置、支持事務(wù)的SQL數(shù)據(jù)庫(kù)引擎。其特點(diǎn)是高度便攜、使用方便、結(jié)構(gòu)緊湊、高效、可靠。 與其他數(shù)據(jù)庫(kù)管理系統(tǒng)不同,SQLite 的安裝和運(yùn)行非常簡(jiǎn)單,在大多數(shù)情況下,只要確保SQLite的二進(jìn)制文件存在即可開始創(chuàng)建、連接和使用數(shù)據(jù)庫(kù)。如果您正在尋找一個(gè)嵌入式數(shù)據(jù)庫(kù)項(xiàng)目或解決方案,SQLite是絕對(duì)值得考慮。SQLite可以是說(shuō)開源的Access。
Go支持sqlite的驅(qū)動(dòng)也比較多,但是好多都是不支持database/sql接口的
目前支持database/sql的SQLite數(shù)據(jù)庫(kù)驅(qū)動(dòng)只有第一個(gè),我目前也是采用它來(lái)開發(fā)項(xiàng)目的。采用標(biāo)準(zhǔn)接口有利于以后出現(xiàn)更好的驅(qū)動(dòng)的時(shí)候做遷移。
示例的數(shù)據(jù)庫(kù)表結(jié)構(gòu)如下所示,相應(yīng)的建表SQL:
CREATE TABLE `userinfo` (
`uid` INTEGER PRIMARY KEY AUTOINCREMENT,
`username` VARCHAR(64) NULL,
`departname` VARCHAR(64) NULL,
`created` DATE NULL
);
CREATE TABLE `userdeatail` (
`uid` INT(10) NULL,
`intro` TEXT NULL,
`profile` TEXT NULL,
PRIMARY KEY (`uid`)
);
看下面Go程序是如何操作數(shù)據(jù)庫(kù)表數(shù)據(jù):增刪改查
package main
import (
"database/sql"
"fmt"
_ "github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./foo.db")
checkErr(err)
//插入數(shù)據(jù)
stmt, err := db.Prepare("INSERT INTO userinfo(username, departname, created) values(?,?,?)")
checkErr(err)
res, err := stmt.Exec("astaxie", "研發(fā)部門", "2012-12-09")
checkErr(err)
id, err := res.LastInsertId()
checkErr(err)
fmt.Println(id)
//更新數(shù)據(jù)
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)
//查詢數(shù)據(jù)
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)
}
//刪除數(shù)據(jù)
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)
}
}
我們可以看到上面的代碼和MySQL例子里面的代碼幾乎是一模一樣的,唯一改變的就是導(dǎo)入的驅(qū)動(dòng)改變了,然后調(diào)用sql.Open
是采用了SQLite的方式打開。
sqlite管理工具: http://sqliteadmin.orbmu2k.de/
可以方便的新建數(shù)據(jù)庫(kù)管理。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: