测试用go语言执行脚本把数据保存到SQLite数据库

事先安装go开发环境,并设置环境变量。

复制代码
C:\d>set GOROOT=C:\d\gowin\go
C:\d>set GOPATH=c:\d\goprj

C:\d>set path=%GOROOT%\bin;%GOPATH%\bin;%PATH%

C:\d\goprj>go env -w GOPROXY=https://goproxy.cn,direct
  1. 获取sqlite驱动

    C:\d\goprj>go get github.com/mattn/go-sqlite3
    go: downloading github.com/mattn/go-sqlite3 v1.14.52
    go: added github.com/mattn/go-sqlite3 v1.14.52

编写go程序

go 复制代码
package main

import (
"database/sql"
"io/ioutil"
"log"
_ "github.com/mattn/go-sqlite3"
)

func main() {
db, err := sql.Open("sqlite3", "./test.db?_journal=WAL")
if err != nil {
log.Fatal(err)
}
defer db.Close()

script, err := ioutil.ReadFile("schema.txt")
if err != nil {
log.Fatal(err)
}

_, err = db.Exec(string(script))
if err != nil {
log.Fatalf("执行 SQL 脚本失败: %v", err)
}

log.Println("SQL 脚本执行成功!")
}

和sql脚本文件schema.txt

sql 复制代码
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
);
INSERT INTO users(name, age) VALUES('张三', 30);
INSERT INTO users(name, age) VALUES('李四', 25);

执行出错,有几种错因,分别是GOOS错误,CGO_ENABLED参数错误。

复制代码
C:\d\goprj>go run testsqlite.go
exec: "C:\\Users\\lt\\AppData\\Local\\Temp\\go-build3051985547\\b001\\exe\\testsqlite": executable file not found in %PATH%

C:\d\goprj>set GOOS=windows

C:\d\goprj>go run testsqlite.go
2026/10/24 21:12:41 执行 SQL 脚本失败: Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 requires cgo to work. This is a stub
exit status 1

C:\d\goprj>set CGO_ENABLED=1

C:\d\goprj>go run testsqlite.go
# runtime/cgo
cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%

把本地安装的mingw64 gcc加入路径,就能执行go文件了。也能build成可执行文件。

复制代码
C:\d\goprj>set path=%PATH%;C:\d\mingw64\bin

C:\d\goprj>go run testsqlite.go
2026/10/24 21:31:01 SQL 脚本执行成功!

C:\d\goprj>go build testsqlite.go

C:\d\goprj>testsqlite
2026/10/24 21:32:21 SQL 脚本执行成功!

用sqlite CLI验证写入的test.db文件, 完全正确。

复制代码
C:\d\goprj>..\sqlite354 test.db
SQLite version 3.54.0 2026-10-09 15:46:58
Enter ".help" for usage hints.
SQLite-3.54 test.db-> .tables
users
SQLite-3.54 test.db-> select * from users;
╭────┬──────┬─────╮
│ id │ name │ age │
╞════╪══════╪═════╡
│  1 │ 张三 │  30 │
│  2 │ 李四 │  25 │
╰────┴──────┴─────╯
相关推荐
Pniubi2 分钟前
怎么排查慢SQL,怎么解决?
java·数据库·sql
Decay__4 小时前
VMware 安装 SQL Server 双节点 AlwaysOn 可用性组教程 —— WSFC、AG 与侦听器完整部署(系列核心篇)
运维·数据库·sql·mysql·架构
茶栀(*´I`*)5 小时前
SQL 性能分析:从慢查询日志到执行计划的完整定位方法
数据库·sql
艺杯羹5 小时前
1Panel 装好后 ufw 仍是 inactive:一次服务器安全盲区复盘
服务器·数据库·安全·网络安全·系统架构·实战·1panel
code2cat6 小时前
【随笔】MCP工具重试:任务已经创建,响应丢了怎么办
数据库·mcp
wuyk5558 小时前
Spider-第10讲-SQLite持久化与去重
数据库·爬虫·sqlite
乌暮9 小时前
Spring AOP 与 Spring 事务:用大白话彻底理解原理与实践
java·数据库·spring boot·后端·sql·学习·spring
小此方10 小时前
Re:Mysql数据库基础篇(十二):什么是事务、事务解决了什么问题、事务的四大属性、事务的操作方式
数据库·mysql
flash俊杰11 小时前
v0.5-01 让桌面 AI 助手记得住:预算组装、递归摘要、长期记忆与评估基线
数据库·安全·架构
2501_9339232512 小时前
redis:string类型常见命令
数据库·redis·缓存