【问题标题】:Communication to DB-File with Luasql and sqlite3 is not working使用 Luasql 和 sqlite3 与 DB-File 通信不起作用
【发布时间】:2018-08-25 15:11:37
【问题描述】:

我正在尝试使用 luasql 和 sqlite3 与我的数据库通信。我已经阅读了许多网站并找到了一些示例。但是似乎有许多不同的方法可以使用 luasql。但对我来说,他们似乎都没有工作......我真的很沮丧,不知道该怎么办。以下代码 sn-p 对我不起作用,因为我无法从表中选择任何内容

local env = assert(luasql.sqlite()) -- Create a database environment object
local conn = assert(env:connect("cloud.db")) -- Open a database file
conn:execute(string.format([[INSERT INTO HEAVEN VALUES ('%s', '%s', '%s', '0', '0', '%s')]], id, name, tid, date))
cur = conn:execute(string.format([[SELECT TID FROM HEAVEN]]))
devtid = cur.fetch({}, "n")

当我使用引号 (") 而不是 2 个方括号 ([[ ]]) 或添加其他引号时,如以下代码 sn-p 所示,它对我不起作用

conn:execute(string.format("\"INSERT INTO HEAVEN VALUES ('%s', '%s', '%s', '0', '0', '%s')\"", id, name, tid, date))

甚至当我在使用时

conn:execute("INSERT OR REPLACE INTO HEAVEN VALUES (0,0,0,0,0,0)")

如果不插入一些移交的值并格式化字符串,它也将无法工作......

我真的不知道该怎么办。有人可以帮助我吗?

编辑:我尝试了您的变体 @kingJulien 并将其保存在变量中以在执行之前打印命令:

local query = string.format([[INSERT INTO HEAVEN(ID, NAME, TID) VALUES (]] .. tonumber(id) .. [[,"]] .. name .. [[","]] .. tid .. [[");]])
trace(query)
conn:execute(query)

而变量的值为:

INSERT INTO HEAVEN(ID, NAME, TID) 值 (1,"ESP-HEAVEN","1421856859");

所以这个命令应该被执行。当我在带有 sqlite3 的 putty 中使用该命令时,它工作正常。真的,我不明白为什么这不起作用....

【问题讨论】:

    标签: mysql sqlite lua luasql


    【解决方案1】:

    luasql 中,当您要执行查询时,您需要使用括号[[ ]].. 来指定值。所以你的代码应该写成:

    [[INSERT INTO HEAVEN (id, name, tid, date) ]] .. [[ VALUES (]] .. id_param ..[[,]] .. name_param .. [[,]] ..tid_param.. [[,]] ..date_param .. [[);]]
    

    其中id_param, name_param, tid_param, date_param 是保存要插入HEAVEN 表中的值的变量。

    还要考虑到您可能需要将变量包装到 tostring()tonumber() 函数中,具体取决于 db 字段的类型。

    【讨论】:

      猜你喜欢
      • 2017-07-18
      • 2012-09-05
      • 2019-01-22
      • 2013-05-01
      • 1970-01-01
      • 2015-10-16
      • 2012-10-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多