zig后端添加sqlite依赖
- sqlite依赖我们使用开源项目 zig-sqlite
- 在
build.zig.zon
文件中添加以下代码,COMMIT值我们可以点击仓库的Commits按钮查看复制然后替换


| .dependencies = .{ |
| .httpz = .{ |
| .url = "https://github.com/karlseguin/http.zig/archive/fbca868592dc83ee3ee3cad414c62afa266f4866.tar.gz", |
| .hash = "122089946af5ba1cdfae3f515f0fa1c96327f42a462515fbcecc719fe94fab38d9b8", |
| }, |
| |
| // 添加sqlite依赖 |
| .sqlite = .{ |
| .url = "https://github.com/vrischmann/zig-sqlite/archive/COMMIT.tar.gz", |
| // hash值是随便写的,为了占位(长度有要求),实际使用时需要替换成正确的hash值 |
| .hash = "122089946af5ba1cdfae3f515f0fa1c96327f42a462515fbcecc719fe94fab382222", |
| }, |
| }, |
| |
| |
| // 替换后的COMMIT |
| // .sqlite = .{ |
| // .url = "https://github.com/vrischmann/zig-sqlite/archive/7f4be7d30b126affb66b390c7825addb1c3506bd.tar.gz", |
| // .hash = "122089946af5ba1cdfae3f515f0fa1c96327f42a462515fbcecc719fe94fab382222", |
| // }, |
然后我们运行zig build
下载sqlite依赖并获取到hash值替换,最终替换正确hash结果如下

| .dependencies = .{ |
| .httpz = .{ |
| .url = "https://github.com/karlseguin/http.zig/archive/fbca868592dc83ee3ee3cad414c62afa266f4866.tar.gz", |
| .hash = "122089946af5ba1cdfae3f515f0fa1c96327f42a462515fbcecc719fe94fab38d9b8", |
| }, |
| |
| // 添加sqlite依赖 |
| .sqlite = .{ |
| .url = "https://github.com/vrischmann/zig-sqlite/archive/7f4be7d30b126affb66b390c7825addb1c3506bd.tar.gz", |
| .hash = "1220940ae067451e7e6824e9b92baceac93b0bd6fa9ffd315179cc9a7ce5430a46ac", |
| }, |
| }, |
- 将sqlite模块添加到
build.zig
文件中
| const sqlite_module = b.dependency("sqlite", .{ |
| .target = target, |
| .optimize = optimize, |
| }); |
| exe.root_module.addImport("sqlite", sqlite_module.module("sqlite")); |
| exe.linkLibrary(sqlite_module.artifact("sqlite")); |
创建sqlite数据库文件
数据库sql语句
| // user表 |
| CREATE TABLE user ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| username VARCHAR (20) UNIQUE |
| NOT NULL, |
| password VARCHAR (100) NOT NULL, |
| nickname VARCHAR (20) |
| ); |
| INSERT INTO "user" VALUES (1, 'tingyu', '8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92', '听雨'); |
| |
| // 文章表 |
| CREATE TABLE article ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| title VARCHAR (1024) NOT NULL, |
| description VARCHAR (1024), |
| content TEXT NOT NULL, |
| istop INTEGER (2) NOT NULL DEFAULT (0), |
| created_at DATETIME, |
| updated_at DATETIME |
| ); |
| |
| |
| INSERT INTO "article" VALUES (1, 'ubuntu安装教程', '最详细的ubuntu安装教程', 'ubuntu安装教程,ubuntu安装教程,ubuntu安装教程', '2024-8-23 16:08:43', '2024-8-23 16:08:43'); |
| |
| // 分类表 |
| CREATE TABLE category ( |
| id INTEGER PRIMARY KEY AUTOINCREMENT, |
| name VARCHAR (20) NOT NULL UNIQUE |
| ); |
测试zig连接sqlite
- 先将我们刚才创建的数据库文件
db_zigblog.db
复制到 zig-out\bin
目录下,main.zig中添加下面代码做sqlite连接测试,结果如图
| // 测试api,测试连接sqlite数据库 |
| router.get("/api/sqlite/user", &getSqliteOneUser); |
| |
| |
| // 测试api,测试连接sqlite数据库 |
| fn getSqliteOneUser(req: *httpz.Request, res: *httpz.Response) !void { |
| _ = req; |
| res.status = 200; |
| |
| var db = try sqlite.Db.init(.{ |
| .mode = sqlite.Db.Mode{ .File = "db_zigblog.db" }, |
| .open_flags = .{}, |
| .threading_mode = .MultiThread, |
| }); |
| |
| const query = |
| \\SELECT id, username, nickname FROM user WHERE id = ? |
| ; |
| |
| var stmt = try db.prepare(query); |
| defer stmt.deinit(); |
| |
| var gpa = std.heap.GeneralPurposeAllocator(.{}){}; |
| const allocator = gpa.allocator(); |
| |
| const row = try stmt.oneAlloc(struct { |
| id: u32, |
| username: []const u8, |
| nickname: []const u8, |
| }, allocator, .{}, .{ |
| .id = 1, |
| }); |
| |
| if (row) |r| { |
| std.debug.print("userid: {d}, username: {s}, nickname: {s}", .{ r.id, r.username, r.nickname }); |
| |
| try res.json(.{ .code = 200, .msg = "ok", .data = .{ |
| .id = r.id, |
| .username = r.username, |
| .nickname = r.nickname, |
| } }, .{}); |
| } else { |
| try res.json(.{ .code = 404, .msg = "not found" }, .{}); |
| } |
| } |

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?