Связь с DB-File с Luasql и sqlite3 не работает
Я пытаюсь связаться с моей базой данных, используя 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 квадратных скобок ([[ ]]) или добавляю другие кавычки, как показано в следующем фрагменте кода, это не работает для меня
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)
и значение переменной:
ВСТАВЬТЕ В НЕБЕСА (ID, ИМЯ, TID) ЗНАЧЕНИЯ (1,"ESP-HEAVEN","1421856859");
поэтому эта команда должна быть выполнена. Когда я использую эту команду в putty с sqlite3, она работает нормально. На самом деле я не понимаю, почему это не работает....
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()
функции в зависимости от типа ваших полей БД.