Go語言中使用SQLite資料庫

來源:互聯網
上載者:User

標籤:

Go語言中使用SQLite資料庫

 

1、驅動

Go支援sqlite的驅動也比較多,但是好多都是不支援database/sql介面的

  • https://github.com/mattn/go-sqlite3 支援database/sql介面,基於cgo(關於cgo的知識請參看官方文檔或者本書後面的章節)寫的
  • https://github.com/feyeleanor/gosqlite3 不支援database/sql介面,基於cgo寫的
  • https://github.com/phf/go-sqlite3 不支援database/sql介面,基於cgo寫的

目前支援database/sql的SQLite資料庫驅動只有第一個,我目前也是採用它來開發項目的。採用標準介面有利於以後出現更好的驅動的時候做遷移。

 

2、執行個體代碼

樣本的資料庫表結構如下所示,相應的建表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程式是如何操作資料庫表資料:增刪改查

package mainimport (    "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)    }}

 

我們可以看到上面的代碼和MySQL例子裡面的代碼幾乎是一模一樣的,唯一改變的就是匯入的驅動改變了,然後調用sql.Open是採用了SQLite的方式開啟。

 

Go語言中使用SQLite資料庫

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.