windows版本go使用sqlite3

windows版本go使用sqlite3。


windows版本的go很简单,直接从go官方网站下载一个go的压缩包,解压即可。

0、加压缩的go,执行一个设置环境变量的脚本,或者使用系统高级设置将go/bin路径添加到PATA中。

注意要使用管理员身份打开一个cmd,然后执行下面的set_env.bat 这个bat和go目录在同一路径,执行完,后面打开的cmd窗口就能执行go命令了。

1
2
3
setx -m GOPATH %~dp0go\
setx -m Path "%Path%;%~dp0go\bin"
pause


1 初始化mod

在项目中先初始化mod(已经初始化过则忽略),打开终端(快捷键Ctrl+Shift+~)执行go mod init xxx(xxx为文件夹名)。

我的文件夹是server,所以命令是go mod init server.


这个命令不执行,则下一步安装sqlite3就会报错。


2 获取sqlite3,如果不执行初始化mod,则会提示get命令报错,建议改成install,用install还是报错,哈哈

go get -u github.com/mattn/go-sqlite3


3、安装msys64,然后安装gcc。这一步不执行,则编译test.go脚本就会报错。

1
pacman -S --needed base-devel mingw-w64-x86_64-toolchain

配置gcc的环境变量到path中,gcc会安装到mingw64/bin下面。E:\msys64\mingw64\bin


4、编译测试sqlite3脚本,如下是test.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
// mySQLiteLink project main.go
package main
 
import (
    "database/sql"
    "fmt" 
    "github.com/mattn/go-sqlite3"
)
  
func InitOpen() {
    db, err := sql.Open("sqlite3""./user.db")
    checkErr(err)
 
    stmt, err := db.Prepare("drop TABLE if EXISTS student")
    checkErr(err)
    res, err := stmt.Exec()
    checkErr(err)
 
    fmt.Println("创建数据表")
    sql_table := `
    CREATE TABLE IF NOT EXISTS "student"(
        "uid"  INTEGER PRIMARY KEY AUTOINCREMENT,
        "name" VARCHAR(64) NULL,
        "age" VARCHAR(64) NULL,
        "class" VARCHAR(64) NULL
    )`
    db.Exec(sql_table)
 
    //插入数据
    stmt, err = db.Prepare("INSERT INTO student(name, age, class) values(?,?,?)")
    checkErr(err)
 
    res, err = stmt.Exec("小明""12""六年级一班")
    checkErr(err)
 
    id, err := res.LastInsertId()
    checkErr(err)
    fmt.Println(id)
}
 
func checkErr(err error) {
    if err != nil {
        panic(err)
    }
}
 
func main() {
    InitOpen()
 
    db, err := sql.Open("sqlite3""./user.db")
    checkErr(err)
     
    //插入数据
    stmt, err := db.Prepare("INSERT INTO student(name, age, class) values(?,?,?)")
    checkErr(err)
 
    res, err := stmt.Exec("小明""12""六年级一班"
     
    res, err = stmt.Exec("小红""11""六年级一班"
     
    res, err = stmt.Exec("小蓝""13""六年级一班")
      
    //返回数据库生成的整数。当插入新行时,自动递增
    id, err := res.LastInsertId()
    checkErr(err)
    fmt.Println(id)
     
    //删除数据
    stmt, err = db.Prepare("delete from student where uid=?")
    checkErr(err)
 
    res, err = stmt.Exec(1)
    checkErr(err)
     
 
    //查询数据  //查询数据
    rows, err := db.Query("select * from student")
    checkErr(err)
 
    fmt.Println("result:")
    for rows.Next() {
        var uid int
        var name string
        var age string
        var class string
 
        err = rows.Scan(&uid, &name, &age, &class)
        checkErr(err)
        fmt.Println(uid)
        fmt.Println(name)
        fmt.Println(age)
        fmt.Println(class)
    
    db.Close()
}


go build ./test.go


或者go run ./test.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
PS E:\wamp\go\gb_player\go_server\server> go run .\test.go
创建数据表
1
4
result:
2
小明
12
六年级一班
3
小红
11
六年级一班
4
小蓝
13
六年级一班


编译报错:

解决panic:Binary was compiled with ‘CGO_ENABLED=0‘, go-sglite3 requires cgo to work. This is a stub的问题

输入命令: go env -w CGO_ENABLED=1,然后在输入go env 查看是否修改成功


呱牛笔记

-------------------广告线---------------
项目、合作,欢迎勾搭,邮箱:promall@qq.com


本文为呱牛笔记原创文章,转载无需和我联系,但请注明来自呱牛笔记 ,it3q.com

请先登录后发表评论
  • 最新评论
  • 总共0条评论