测试用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 │
╰────┴──────┴─────╯
相关推荐
猫咪很可爱2 小时前
MySQL 5.7 备份恢复后函数与存储过程丢失:原因分析与正确备份姿势
数据库·mysql·bug·shell
GottdesKrieges2 小时前
Redis哨兵模式新建用户和修改口令
数据库·redis
二宝哥3 小时前
02.springboot项目对接国内模型实现对话聊天
数据库·人工智能·spring boot
秦时明月之君临天下4 小时前
MySQL purge 参数详解:innodb_purge_threads 与 innodb_purge_batch_size
数据库·mysql·1024程序员节
三垣网安4 小时前
某某大学心理健康教育平台弱口令及SQL注入漏洞
数据库·sql
打工仔折腾 AI4 小时前
AI Agent 工程化实战(二):5 分钟跑通 Deep Agent 并逐层拆解底层链路
java·数据库·人工智能·后端·python·langchain·ai agent 实战
Shaoshing4 小时前
MySQL视图
数据库
这个DBA有点耶5 小时前
测试全绿,上线三周数据没入账——那个95%的兼容度报告,漏掉的是边界
数据库·mysql·架构
1024奇点5 小时前
【仓颉语言入门 · 第二篇 第 15 课】
开发语言·数据库·ide·开源