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

一、sqlite

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

SQLite 的一些主要特性包括:

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

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

sudo apt install sqlite3
sqlite3 --version

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

sqlite3 sqlite.db

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

.tables
SELECT * FROM notifications;

二、关于mattn/gosqlite3

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

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

三、mattn/gosqlite3使用

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

sudo apt-get install build-essential
package main

import (
	"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 int
		var name string
		err = rows.Scan(&amp;id, &amp;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 compilergccnot 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” 驱动程序名称

原文地址:https://blog.csdn.net/inthat/article/details/134726254

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_25238.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注