You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用lsqlite3插入数据时出现stmt为nil的错误求助

解决lsqlite3中prepare返回nil的问题

你的错误attempt to index local 'stmt' (a nil value)本质是db:prepare()调用失败,没有生成有效的预处理语句对象。按以下步骤排查修复:

1. 先捕获prepare的错误信息

lsqlite3的prepare方法执行失败时,会返回nil加上具体错误描述字符串。修改代码捕获错误,就能直接定位失败原因:

local stmt, err = db:prepare [[INSERT INTO tips_table (time, date, counter) VALUES (?, ?, ?);]]
if not stmt then
    print("Prepare failed: " .. err)
    return
end
stmt:bind_values(os.date('%H:%M:%S'), os.date('%Y-%m-%d'), counter)
-- 注意:绑定后要执行语句并关闭预处理对象
stmt:step()
stmt:finalize()

2. 常见失败原因及修复

数据库连接无效

先确认db是正常打开的数据库实例,打开时也要捕获错误:

local sqlite3 = require("lsqlite3")
local db, open_err = sqlite3.open("your_db_file.db")
if not db then
    print("Open database failed: " .. open_err)
    return
end

SQL日期格式不匹配SQLite要求

SQLite的DATE类型仅识别YYYY-MM-DD格式,你当前用os.date('%y/%m/%d')生成的是YY/MM/DD(比如24/05/20),不符合规范。改成os.date('%Y-%m-%d')生成标准格式的日期字符串。

变量counter未定义或类型错误

确保counter是有效的整数类型,如果是nil或非数值,可能间接导致流程出错(先确认变量已正确赋值)。

3. 完整可运行示例代码

local sqlite3 = require("lsqlite3")
local db, open_err = sqlite3.open("test.db")
if not db then
    print("Open DB failed: " .. open_err)
    return
end

-- 创建表并检查结果
local create_code, create_err = db:exec [[CREATE TABLE IF NOT EXISTS tips_table (id INTEGER PRIMARY KEY,time TIME,date DATE, counter INTEGER)]]
if create_code ~= sqlite3.OK then
    print("Create table failed: " .. create_err)
    db:close()
    return
end

local counter = 1 -- 示例计数器值
local stmt, err = db:prepare [[INSERT INTO tips_table (time, date, counter) VALUES (?, ?, ?);]]
if not stmt then
    print("Prepare failed: " .. err)
    db:close()
    return
end

-- 绑定值并执行插入
stmt:bind_values(os.date('%H:%M:%S'), os.date('%Y-%m-%d'), counter)
local step_code = stmt:step()
if step_code ~= sqlite3.DONE then
    print("Insert failed: " .. db:errmsg())
end

stmt:finalize()
db:close()

内容的提问来源于stack exchange,提问作者kaygee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 00:12:34