使用Luasql和sqlite3与DB-File进行通信无效

时间:2018-03-16 14:05:10

标签: mysql sqlite lua luasql

我正在尝试使用luasql和sqlite3与我的数据库进行通信。我通过很多网站阅读自己,并找到了一些例子。但是有许多不同的方法似乎可以使用luasql。但对我来说似乎没有人工作......我真的很沮丧,不知道该怎么做。以下代码段对我不起作用,因为我无法从表中选择任何内容

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 square-Brakets([[]])或添加其他引号时,如下面的代码片段所示,它对我不起作用

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)VALUES(1,“ESP-HEAVEN”,“1421856859”);

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

1 个答案:

答案 0 :(得分:0)

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()函数中。