Связь с 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() функции в зависимости от типа ваших полей БД.

Другие вопросы по тегам