我正在尝试使用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的那个命令时它工作正常。对于真实的我不明白为什么这不起作用....
答案 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()
函数中。