GO database/sql

本文介绍如何使用Golang的标准库database/sql结合go-sqlite3驱动进行SQLite数据库的操作,包括创建表、插入数据及查询等基本操作,并提供了一个完整的示例。

database/sql

Golang提供了标准库database/sql用于和数据库交互,database/sql只是一套统一地抽象接口,真正与数据库打交道的是各个数据库对应的驱动实现,因此使用前需要先注册对应数据库的驱动,然后就可以使用SQL中定义的接口来统一地操作数据库了。

go-sqlite3

  • go-sqlite3库是Golang实现SQLite数据库的驱动
  • go-sqlite3依赖于golang.org/x/net/context
$ go get github.com/mattn/go-sqlite3
exec: "gcc": executable file not found in %PATH%

由于SQLite3使用C语言开发,因此go-sqlite3需要GCC工具来编译C代码。

MinGW

MinGW全称Minimalist GNU on Windows,它实际上是将经典的开源C语言编译器GCC移植到Windows平台,包含Win32API,因此可将源代码编译为可在Windows中运行的可执行程序。简单来说,MinGW就是GCC的Windows版本。

进入 https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/,下载 mingw-w64-install.exe 安装。

选择版本

将下载的mingw64文件夹下的bin目录添加到系统环境变量Path中。

$ gcc -v
gcc version 9.2.0 (tdm64-1)

TDM-GCC

TDM-GCC 衍生自 MinGW 和 MinGW-w64 的项目,TDM-GCC是 http://tdragon.net 搞的用于MinGW和mingw-w64的gcc分支,使用广泛。

下载安装后,将bin目录添加到系统环境变量Path中。

$ gcc -v
gcc version 9.2.0 (tdm64-1)

示例

$ vim ./test/test_sql.go
package test

import (
    "database/sql"
    "fmt"
    "testing"

    _ "github.com/mattn/go-sqlite3"
)

func TestSql(t *testing.T) {
    db, err := sql.Open("sqlite3", "test.db")
    if err != nil {
        panic(err)
    }
    defer func() {
        db.Close()
    }()

    var query string

    query = "DROP TABLE IF EXISTS users;"
    _, err = db.Exec(query)
    if err != nil {
        panic(err)
    }

    query = "CREATE TABLE users(id INT PRIMARY KEY NOT NULL, name TEXT NOT NULL);"
    _, err = db.Exec(query)
    if err != nil {
        panic(err)
    }

    query = "INSERT INTO users(`id`,`name`) VALUES(1, ?), (2, ?);"
    result, err := db.Exec(query, "admin", "root")
    if err != nil {
        panic(err)
    }
    affected, err := result.RowsAffected()
    if err != nil {
        panic(err)
    }
    fmt.Printf("affected rows is %d\n", affected)

    var name string
    query = "SELECT name FROM users WHERE 1=1 LIMIT 0,1;"
    row := db.QueryRow(query)
    err = row.Scan(&name)
    if err != nil {
        panic(err)
    }
    fmt.Printf("name = %v\n", name)
}

执行

$ go test -v --run=TestSql sql_test.go
=== RUN   TestSql
affected rows is 2
name = admin
--- PASS: TestSql (0.02s)
PASS
ok      command-line-arguments  0.996s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值