golang常用库之-操作sqlite数据库

文章目录

    • 一、sqlite
      • 使用sqlite3命令行工具创建数据库,查询数据
    • 二、关于mattn/go-sqlite3
    • 三、mattn/go-sqlite3使用
    • 四、go 使用sqlite常见问题总结
      • window下编译报错:Binary was compiled with 'CGO_ENABLED=0', go-sqlite3 require
      • window下编译报错:cgo: C compiler "gcc" not found: exec: "gcc": executable file not found in %PATH%
      • 报错:sql: unknown driver "sqlite3" (forgotten import?)

一、sqlite

SQLite 是一个开源的嵌入式关系数据库,实现了自给自足的、无服务器的、配置无需的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库系统不同,比如 MySQL、PostgreSQL 等,SQLite 不需要在系统中设置和管理一个单独的服务。这也使得 SQLite 是一种非常轻量级的数据库解决方案,非常适合小型项目、嵌入式数据库或者测试环境中。

SQLite 的一些主要特性包括:

  • 无服务器的:SQLite 不是一个单独的服务进程,而是直接嵌入到应用程序中。它直接读取和写入磁盘文件。
  • 事务性的:SQLite 支持
  • ACID(原子性、一致性、隔离性、持久性)属性,能够确保所有事务都是安全、一致的,即使在系统崩溃或者电力中断的情况下。
  • 零配置的:SQLite 不需要任何配置或者管理,这使得它非常容易安装和使用。
  • 自包含的:SQLite 是一个自包含系统,这意味着它几乎不依赖其他任何外部系统或者库,这使得 SQLite 的跨平台移植非常方便。
  • 小型的:SQLite 非常小巧轻量,全功能的 SQLite 数据库引擎的大小只有几百KB。
  • 广泛应用:SQLite 被广泛应用在各种各样的产品和系统中,包括手机、平板电脑、嵌入式系统、物联网设备等。它也被广泛用于网站开发、科学研究、数据分析等领域。

在一些轻量级的应用场景下,SQLite 是一个非常理想的选择,因为它简单、高效、易于使用和部署。然而,对于需要处理大量并发写操作或者需要更高级的功能(如用户管理或者存储过程等)的应用场景,更全功能的数据库系统(如 PostgreSQL 或 MySQL)可能会是更好的选择。

使用sqlite3命令行工具创建数据库,查询数据

sudo apt install sqlite3
sqlite3 --version

运行以下命令启动 sqlite3 工具,并指定要创建的数据库文件名(例如 mydatabase.db):

sqlite3 sqlite.db

在 sqlite3 提示符下,输入 .tables 命令来列出数据库中的所有表:

.tables
SELECT * FROM notifications;

退出命令行环境:.quit /.exit

二、关于mattn/go-sqlite3

github:https://github.com/mattn/go-sqlite3
官方文档:https://pkg.go.dev/github.com/mattn/go-sqlite3?utm_source=godoc

github.com/mattn/go-sqlite3:这是一个流行的 SQLite3 驱动程序,支持 SQLite 的大多数功能。它是官方 SQLite C 语言库的绑定,使用广泛且有很多用户。

三、mattn/go-sqlite3使用

To compile this package on Linux, you must install the development tools for your linux distribution.
Ubuntu

sudo apt-get install build-essential
package mainimport ("database/sql""fmt""log"_ "github.com/mattn/go-sqlite3"
)func main() {// 打开数据库连接db, err := sql.Open("sqlite3", "test.db")if err != nil {log.Fatal(err)}defer db.Close()// 创建表和清空表数据_, err = db.Exec(`CREATE TABLE IF NOT EXISTS foo (id INTEGER PRIMARY KEY,name TEXT);DELETE FROM foo;`)if err != nil {log.Fatal(err)}// 开启事务tx, err := db.Begin()if err != nil {log.Fatal(err)}defer tx.Rollback() // 注意:如果出现错误,及时回滚事务// 准备插入语句stmt, err := tx.Prepare("INSERT INTO foo(id, name) VALUES(?, ?)")if err != nil {log.Fatal(err)}defer stmt.Close()// 执行插入操作for i := 0; i < 100; i++ {_, err = stmt.Exec(i, fmt.Sprintf("こんにちわ世界%03d", i))if err != nil {log.Fatal(err)}}// 提交事务err = tx.Commit()if err != nil {log.Fatal(err)}// 查询数据并打印rows, err := db.Query("SELECT id, name FROM foo")if err != nil {log.Fatal(err)}defer rows.Close()for rows.Next() {var id intvar name stringerr = rows.Scan(&id, &name)if err != nil {log.Fatal(err)}log.Println(id, name)}err = rows.Err()if err != nil {log.Fatal(err)}
}

四、go 使用sqlite常见问题总结

window下编译报错:Binary was compiled with ‘CGO_ENABLED=0’, go-sqlite3 require

s cgo to work. This is a stub

go-sqlite3 需要使用 CGO 才能正常工作。

解决方法,设置环境变量 CGO_ENABLED=1,让编译时候开启cgo

window下编译报错:cgo: C compiler “gcc” not found: exec: “gcc”: executable file not found in %PATH%

使用 CGO 编译需要安装 C 编译器。在 Windows 系统上,安装 C 编译器是为了支持 CGO 的编译过程。

CGO 是 Go 语言的一个功能,允许在 Go 代码中调用 C 语言代码。为了支持这种跨语言调用,CGO 需要依赖 C 编译器来编译和链接 C 代码。

在 Windows 上,常见的 C 编译器包括 MinGW-w64、TDM-GCC 等。安装其中一个 C 编译器后,将其可执行文件所在的路径添加到系统的 PATH 环境变量中,这样 Go 语言就能够找到并使用 C 编译器进行 CGO 编译。

所以,如果您在 Windows 上需要使用 CGO 编译 Go 代码,确保您已经安装了 C 编译器,并将其路径添加到系统的 PATH 环境变量中。

官方readme中也有说明:
https://github.com/mattn/go-sqlite3#linux

官方推荐的是 TDM-GCC 。

TDM-GCC 和 MinGW-w64 都是在 Windows 环境下常用的 C/C++ 编译器套件,用于支持 CGO 编译。

TDM-GCC:
TDM-GCC 是基于 MinGW 的一个分支,提供了一组预编译的 Windows 版本的 GCC 工具链。
TDM-GCC 比较容易安装和配置,适合入门用户。
TDM-GCC 提供了更好的兼容性和稳定性,以及更好的支持和维护。

总结:于大多数用户来说,TDM-GCC 是一个良好的选择,因为它易于安装和使用,并且提供了稳定的 Windows 版本的 GCC 工具链。

报错:sql: unknown driver “sqlite3” (forgotten import?)

由于忘记导入 “github.com/mattn/go-sqlite3” 包导致的。

在您的代码中,请确保在使用 SQLite 驱动程序之前,通过添加以下导入语句来导入 “github.com/mattn/go-sqlite3” 包:

import _ "github.com/mattn/go-sqlite3"

这将确保 SQLite 驱动程序正确注册,并使您能够在代码中使用 “sqlite3” 驱动程序名称。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/198894.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

线程池原理初探

1.引言 合理利用线程池能够带来三个好处。第一&#xff1a;降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。第二&#xff1a;提高响应速度。当任务到达时&#xff0c;任务可以不需要的等到线程创建就能立即执行。第三&#xff1a;提高线程的可管理性。…

逗号表达式

exp1, exp2, exp3, …expN 逗号表达式&#xff0c;就是用逗号隔开的多个表达式。逗号表达式&#xff0c;从左向右依次执行。整个表达式的结果是最后一个表达式的结果。 代码示例&#xff1a; #include <stdio.h>int main() {int a 5;int b 3;int c (a > b, a b …

re:Invent 云端历程:我与 2023 亚马逊云科技 re:Invent 大会

每年的11月&#xff0c;科技界的精英们汇聚在拉斯维加斯&#xff0c;参与亚马逊云科技 re:Invent 大会&#xff0c;这个一年一度的科技盛宴。我也是其中的一员&#xff0c;深深感受到这场盛会给我带来的启发和收获。 1. 我和 re:Invent 大会的故事 参加 re:Invent 大会是一次…

哈希表【1】

文章目录 &#x1f914;0.哈希表&#x1f33c;1. 两数之和&#x1f33b;1. 题目&#x1f337;2. 算法原理&#x1f33a;3. 代码实现 &#x1f348;面试题 01.02. 判定是否互为字符重排&#x1f34c;1. 题目&#x1f34f;2. 算法原理&#x1f353;3. 代码实现 &#x1f914;0.哈…

Cmake时遇到Could Not find CURL问题

操作系统&#xff1a;Ubuntu 20.04 cmake编译的时候&#xff0c;出现下述错误Could Not find CURL。 结合上述错误&#xff0c;又去看了CMakelist文件&#xff0c;看到CURL的最小版本需要7.28.0。 首先确认一下自己的curl是否安装&#xff0c;版本号是多少&#xff0c;结果如下…

已知线段的两端点a、b,求线段外一点到线段的距离

公式推导过程已经不存在 仅剩下代码 贴出来&#xff0c;方便使用 // 计算点p到直线a,b的距离&#xff0c;OpenCVstatic float distancePointToLineCV(const cv::Point2f& p, const cv::Point2f& a, const cv::Point2f& b){float v1 std::fabs((b.y - a.y) * p.x…

Pytest接口自动化测试框架搭建模板

auto_api_test 开发环境: Pycharm 开发语言&版本: python3.7.8 测试框架: Pytest、测试报告: Allure 项目源码Git地址 项目目录结构 api – 模仿PO模式, 抽象出页面类, 页面类内包含页面所包含所有接口, 并封装成方法可供其他模块直接调用config – 配置文件目录data…

学习设计模式的网站

Refactoring and Design Patternshttps://refactoring.guru/

vue.js怎么保证计算精度

为什么js计算会丢失精度&#xff1f; JavaScript 中的精度丢失问题通常出现在处理浮点数时。 这是因为 JavaScript 使用双精度浮点数格式&#xff08;64位&#xff09;&#xff0c;无法精确表示所有的小数。举例来说&#xff0c;尝试计算 0.1 0.2 会得到一个近似值 0.300000…

华为云RDS通用型(x86) vs 鲲鹏(ARM)架构的性能对比

概述 之前&#xff0c;我们对比了阿里云RDS的经济版&#xff08;ARM&#xff09;与x86版的性价比&#xff0c;这次我们来看看华为云的RDS MySQL的“通用型”(x86)与“鲲鹏通用增强型”(ARM)版本的情况如何。 这里依旧选择了用户较为常用的4c16g的规格进行测试&#xff0c;测试…

【Rust与AI】概览和方向

本系列主要介绍Rust与AI的那些天作之合&#xff08;开源项目&#xff09;&#xff0c;我们会以开源项目代码阅读的方式推进&#xff0c;以Rust为主&#xff0c;同时科普AI相关知识&#xff0c;目的是让更多非算法、非Rust的程序员进一步学习Rust和AI相关知识。当然&#xff0c;…

【Python】 pip 常用命令及相关作用和使用场景

pip是Python的包管理工具&#xff0c;它允许开发者安装、升级和管理Python软件包。以下是一些常用的pip命令&#xff1a; 1. **列出已安装的包**&#xff1a; pip list 或者 pip freeze 2. **安装包**&#xff1a; pip install [package-name]…

git的基本命令操作超详细解析教程

Git基础教学 1、初始化配置2、初始化仓库3、工作区域和文件状态4、添加和提交文件5、git reset 回退版本6、git diff查看差异7、删除文件git rm8、.gitignore10、分支基础应用1、本地文件提交到远程仓库 Git&#xff1a;一个开源的分布式版本控制系统&#xff0c;它可以在本地和…

AIGC创作ChatGPT源码+AI绘画(Midjourney绘画)+支持GPT-4-Turbo模型+DALL-E3文生图

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…

嵌入式硬件和软件哪个好?

嵌入式硬件和软件哪个好? 嵌入式软硬件工程师哪个更有前途呢?一起来看看。 嵌入式是分为软硬件工程师的&#xff0c;首先我们先来看看嵌入式硬件工程师吧! 嵌入式硬件开发工程师主要编写嵌入式系统硬件总体方案和详细方案&#xff0c;要求理解嵌入式系统架构&#xff0c;有一…

智能优化算法应用:基于世界杯算法无线传感器网络(WSN)覆盖优化 - 附代码

智能优化算法应用&#xff1a;基于世界杯算法无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用&#xff1a;基于世界杯算法无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.世界杯算法4.实验参数设定5.算法结果6.参考文献7.…

java学习part36set

157-集合框架-Set不同实现类的对比及Set无序性、不可重复性的剖析_哔哩哔哩_bilibili 1.Set 加入集合的时候会先调用重写的hash方法计算hash值&#xff0c;不一样就加入。 如果hash一样且equals也是true就是重复 &#xff0c;调equals是为了保险&#xff0c;保证排除hash碰撞…

MySQL数据误删除恢复

1.1 问题简述 开发反馈误删除了部分业务数据&#xff0c;需要恢复数据。 这里采用binlog2sql工具进行数据回滚。 1.2 环境 CentOS Linux release 7.4.1708 (Core) mysql Ver 8.0.21 for Linux on x86_64 (MySQL Community Server - GPL) 1.3 数据库开启binlog 因为数据库serve…

Windows环境下RocketMQ的安装及配置

目录 1.环境准备2.下载RocketMQ3.配置RocketMQ环境变量4.启动RecoketMQ4.1启动 name server4.2 启动 broker 5、启动报错问题解决5.1 java_HOME变量找不到5.2 启动闪退问题 1.环境准备 JDK和Maven需要先安装好。 RocketMQ是用Java语言写的&#xff0c;所以需要JDK的支持。 后面…

Mac电脑vm虚拟机 VMware Fusion Pro中文 for mac

VMware Fusion Pro是一款功能强大的虚拟机软件&#xff0c;适用于需要在Mac电脑上运行其他操作系统的用户。它具有广泛的支持、快速稳定的特点以及多种高级功能&#xff0c;可以满足用户的各种需求和场景。 多操作系统支持&#xff1a;VMware Fusion Pro允许在Mac电脑上运行多…