前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >windows版本go使用sqlite3

windows版本go使用sqlite3

作者头像
呱牛笔记
发布2024-08-06 10:48:25
940
发布2024-08-06 10:48:25
举报
文章被收录于专栏:呱牛笔记

windows版本go使用sqlite3。

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

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

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

代码语言:javascript
复制
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脚本就会报错。

代码语言:javascript
复制
pacman -S --needed base-devel mingw-w64-x86_64-toolchain

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

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

代码语言:javascript
复制
// 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

代码语言:javascript
复制
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 查看是否修改成功

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024/08/05 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档