新闻中心
Golang如何操作SQLite数据库_Golang SQLite数据库CRUD示例
Go语言通过database/sql和mattn/go-sqlite3驱动操作SQLite,实现增删改查:先用sql.Open连接数据库并Ping验证,接着Exec创建表,使用预处理语句插入数据并获取ID,QueryRow查询单行、Query多行遍历结果,Exec配合RowsAffected更新或删除记录,最后完整示例展示流程,适用于轻量级项目开发。

Go语言操作SQLite数据库非常简单,主要通过database/sql包结合第三方驱动(如modernc.org/sqlite或mattn/go-sqlite3)来实现。本文使用广泛使用的mattn/go-sqlite3驱动,演示如何在Golang中完成SQLite的增删改查(CRUD)操作。
安装依赖
使用以下命令安装SQLite驱动:
go get github.com/mattn/go-sqlite3连接SQLite数据库
打开或创建SQLite数据库文件只需调用sql.Open并指定驱动名和数据库路径:
if err != nil {
log.Fatal(err)
}
defer db.Close()
如果文件不存在,SQLite会自动创建它。注意:即使数据库文件未创建,sql.Open也不会立即报错,建议执行一条简单查询验证连接:
log.Fatal(err)
}
创建数据表
使用db.Exec执行DDL语句创建表:
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT UNIQUE NOT NULL
);`
_, err = db.Exec(createTableSQL)
if err != nil {
log.Fatal(err)
}
插入数据(Create)
使用预处理语句防止SQL注入,Exec返回结果对象可获取自增ID:
动态WEB网站中的PHP和MySQL:直观的QuickPro指南第2版
动态WEB网站中的PHP和MySQL详细反映实际程序的需求,仔细地探讨外部数据的验证(例如信用卡卡号的格式)、用户登录以及如何使用模板建立网页的标准外观。动态WEB网站中的PHP和MySQL的内容不仅仅是这些。书中还提到如何串联J*aScript与PHP让用户操作时更快、更方便。还有正确处理用户输入错误的方法,让网站看起来更专业。另外还引入大量来自PEAR*函数库的强大功能,对常用的、强大的包
525
查看详情
insertSQL := "INSERT INTO users(name, email) VALUES(?, ?)"result, err := db.Exec(insertSQL, "Alice", "alice@example.com")
if err != nil {
log.Fatal(err)
}
id, err := result.LastInsertId()
if err != nil {
log.Fatal(err)
}
fmt.Printf("插入成功,ID:
%d\n", id)查询数据(Read)
使用Query或QueryRow读取数据:
var name, email string
err = db.QueryRow("SELECT name, email FROM users WHERE id = ?", 1).Scan(&name, &email)
if err != nil {
if err == sql.ErrNoRows {
fmt.Println("用户不存在")
} else {
log.Fatal(err)
}
}
fmt.Printf("用户: %s, 邮箱: %s\n", name, email)
// 查询多行
rows, err := db.Query("SELECT id, name, email FROM users")
if err != nil {
log.Fatal(err)
}
defer rows.Close()
for rows.Next() {
var id int
var name, email string
err := rows.Scan(&id, &name, &email)
if err != nil {
log.Fatal(err)
}
fmt.Printf("ID: %d, 名字: %s, 邮箱: %s\n", id, name, email)
}
更新数据(Update)
使用Exec执行UPDATE语句,检查影响行数判断是否成功:
result, err := db.Exec(updateSQL, "new_email@example.com", "Alice")
if err != nil {
log.Fatal(err)
}
count, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
fmt.Printf("更新了 %d 条记录\n", count)
删除数据(Delete)
DELETE操作与UPDATE类似:
deleteSQL := "DELETE FROM users WHERE id = ?"result, err := db.Exec(deleteSQL, 1)
if err != nil {
log.Fatal(err)
}
count, err := result.RowsAffected()
if err != nil {
log.Fatal(err)
}
fmt.Printf("删除了 %d 条记录\n", count)
完整示例代码结构
将上述逻辑整合成一个可运行程序:
package mainimport (
"database/sql"
"fmt"
"log"
"_ github.com/mattn/go-sqlite3"
)
func main() {
db, err := sql.Open("sqlite3", "./example.db")
if err != nil {
log.Fatal(err)
}
defer db.Close()
if err = db.Ping(); err != nil {
log.Fatal(err)
}
// 创建表、插入、查询、更新、删除...
// 此处省略中间代码
}
基本上就这些。整个流程清晰明了,适合快速构建本地应用或原型系统。注意错误处理不可忽略,尤其是Scan和Exec后的返回值检查。SQLite轻量且无需服务端,非常适合嵌入式或小型项目使用。
以上就是Golang如何操作SQLite数据库_Golang SQLite数据库CRUD示例的详细内容,更多请关注其它相关文章!
# 数据库文件
# 早教营销推广ppt
# 辽阳外贸seo优化
# 梅州网站营销与推广招聘
# 营销方案推广渠道有哪些
# 网站搜索推广运营费用
# 营销人员网站推广话术
# 企业seo推广排名方案
# 乐山湖南网站优化推广
# 厦门微信网站建设案例
# 莆田绍兴网站建设
# 适用于
# 只需
# 遍历
# 尤其是
# git
# 访问权限
# 内网
# 何为
# 不存在
# 如何使用
# 防止sql注入
# 邮箱
# sql注入
# ai
# go语言
# golang
# github
# go
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
CSS Box Model与弹性按钮:维持布局稳定的动画实践
163邮箱登录密码 163邮箱忘记密码找回
c++如何使用std::memory_order控制原子操作顺序_c++ C++11内存模型详解
J*aScript生成器_j*ascript异步迭代
css滚动区域卡顿如何改善_css滚动问题用will-change优化渲染
拼多多视频播放卡顿如何处理 拼多多视频播放优化技巧
sublime如何配置Python开发环境_将sublime打造成轻量级Python IDE
Surface怎么安装系统 微软Surface Pro U盘重装win11教程
J*aScript:在map操作中高效处理空数组
C++如何连接MySQL数据库_C++使用Connector/C++操作MySQL数据库教程
Selenium Python中处理点击后新窗口加载冻结问题的策略与实践
Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】
QQ邮箱官方登录入口_QQ邮箱网页版快捷使用平台
Go语言中Map存储的结构体如何调用指针方法:深入解析与实践
解决macOS上安装pyhdf时‘hdf.h’文件缺失的编译错误
微信语音通话掉线如何解决 微信语音通话稳定优化方法
j*a toString()的覆盖
win11如何卸载Windows更新补丁 Win11解决更新导致系统不稳定的问题【修复】
ACG动漫视频网入口 ACG动漫*免费正版观看地址
最新韩小圈网页版登录入口_官网在线观看官方链接
使用 Pandas 高效处理 .dat 文件:字符清理与数据计算
网易大神怎么保存别人动态的图片_网易大神动态图片保存方法
Pygame教程:解决用户输入与游戏状态更新不同步问题
妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画
J*a TimerTask中HashMap意外清空的深层原因与解决方案
Win11怎么开启卓越性能模式 Win11电源选项启用高性能释放硬件潜力【方法】
c++中为什么推荐使用using替代typedef_c++现代化类型别名
C++如何比较两个字符串_C++ string compare函数与操作符对比
动漫岛观看全网网 动漫岛在线正版动漫入口
微信客户端如何收红包_微信客户端接收红包使用教程
192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台
J*a递归快速排序中静态变量导致数据累积问题的解决方案
C#如何安全地从用户上传的XML文件中读取数据? 验证与清理策略
俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口
如何在J*a中实现统一对象行为接口_项目大型化时的接口规范化
Win10系统怎么查看已安装更新_Win10卸载有问题的更新补丁
C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图
sublime怎么进行远程开发编辑_配置rsub/rmate实现sublime编辑服务器文件
2025-2030年全球乘用车销量预测:新能源成增长主力
C#使用XPath查询节点时出错? 常见语法错误与调试技巧
拼多多赚钱渠道_拼多多收益来源
css元素hover动画延迟生效怎么办_使用animation-delay调整触发时间
Spring Boot嵌入式服务器与J*a EE:功能支持深度解析
yandex入口引擎手机版 yandex安卓版下载入口
红果短剧网页版官网入口 官方最新网址发布
C++ explicit关键字防止隐式转换_C++构造函数安全规范
C#中解析不规范的HTML为XML 常见的坑与解决办法
vivo云服务网页版登录 怎么登录vivo云服务网页版
手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议
vivo浏览器自带的下载器速度慢怎么办 vivo浏览器提升文件下载速度的技巧


2025-12-02
浏览次数:次
返回列表