找回密码
马上加入

QQ登录

只需一步,快速开始

搜索
发新帖

0

收听

2

听众

108

主题
发表于 2024-6-20 22:41:28 | 查看: 70| 回复: 0
Lua 基础教学:第十八篇数据库编程
在本篇文章中,我们将探讨 Lua 中的数据库编程。Lua 可以通过第三方库与多种数据库进行交互,包括 SQLite、MySQL 和 PostgreSQL。本文将重点介绍如何使用 Lua 与 SQLite 进行数据库操作。
安装 LuaSQLite
首先,我们需要安装 LuaSQLite,这是一个用于 SQLite 数据库的 Lua 库。可以使用 LuaRocks 安装:
luarocks install luasql-sqlite3使用 LuaSQLite 进行数据库操作
LuaSQLite 提供了一套简单易用的 API,用于与 SQLite 数据库进行交互。
连接数据库
以下是一个连接 SQLite 数据库的示例:
local luasql = require "luasql.sqlite3"
local env = luasql.sqlite3()
local conn = env:connect("test.db")

if conn then
    print("Connected to database successfully!")
else
    print("Failed to connect to database.")
end创建表
我们可以使用 conn:execute 函数执行 SQL 语句,例如创建表:
local create_table_sql = [[
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    name TEXT,
    age INTEGER
);
]]

local res, err = conn:execute(create_table_sql)
if res then
    print("Table created successfully!")
else
    print("Failed to create table: " .. err)
end插入数据
使用 conn:execute 插入数据到表中:
local insert_sql = [[
INSERT INTO users (name, age) VALUES ('Alice', 30);
INSERT INTO users (name, age) VALUES ('Bob', 25);
]]

local res, err = conn:execute(insert_sql)
if res then
    print("Data inserted successfully!")
else
    print("Failed to insert data: " .. err)
end查询数据
使用 conn:execute 查询数据,并通过游标 cur 迭代结果集:
local query_sql = "SELECT * FROM users;"
local cur = conn:execute(query_sql)

if cur then
    print("Query executed successfully!")
    local row = cur:fetch({}, "a")
    while row do
        print(string.format("ID: %d, Name: %s, Age: %d", row.id, row.name, row.age))
        row = cur:fetch(row, "a")
    end
else
    print("Failed to execute query.")
end更新数据
使用 conn:execute 更新表中的数据:
local update_sql = "UPDATE users SET age = 31 WHERE name = 'Alice';"
local res, err = conn:execute(update_sql)
if res then
    print("Data updated successfully!")
else
    print("Failed to update data: " .. err)
end删除数据
使用 conn:execute 删除表中的数据:
local delete_sql = "DELETE FROM users WHERE name = 'Bob';"
local res, err = conn:execute(delete_sql)
if res then
    print("Data deleted successfully!")
else
    print("Failed to delete data: " .. err)
end关闭连接
完成数据库操作后,记得关闭连接和环境:
conn:close()
env:close()使用 LuaDBI 进行数据库操作
LuaDBI 是另一个常用的数据库库,支持多种数据库。以下是使用 LuaDBI 连接和操作 SQLite 数据库的示例:
luarocks install luadbi-sqlite3连接数据库local dbi = require("DBI")

local conn = dbi.Connect("SQLite3", "test.db")
if conn then
    print("Connected to database successfully!")
else
    print("Failed to connect to database.")
end创建表、插入数据、查询数据
与 LuaSQLite 类似,可以使用 conn:execute 执行 SQL 语句:
-- 创建表
local res = conn:execute([[
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY,
    name TEXT,
    age INTEGER
);
]])

-- 插入数据
conn:execute("INSERT INTO users (name, age) VALUES ('Alice', 30)")
conn:execute("INSERT INTO users (name, age) VALUES ('Bob', 25)")

-- 查询数据
local stmt, err = conn:prepare("SELECT * FROM users")
stmt:execute()
for row in stmt:rows() do
    print(string.format("ID: %d, Name: %s, Age: %d", row.id, row.name, row.age))
end
stmt:close()总结
在这篇教程中,我们介绍了 Lua 中的数据库编程。我们学习了如何使用 LuaSQLite 和 LuaDBI 连接和操作 SQLite 数据库。通过这些功能,可以轻松地将数据库操作集成到 Lua 应用程序中。在接下来的教程中,我们将探讨 Lua 的测试和调试技巧。
继续关注我们的 Lua 教程系列,如果你有任何问题或建议,请在评论区留言。
您需要登录后才可以回帖 登录 | 马上加入

QQ|Archiver|手机版|小黑屋|alg阿灵戈社区 ( 苏ICP备2023026137号-1|苏ICP备2023026137号-1 )

GMT+8, 2025-3-12 23:36 , Processed in 0.581502 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表