Luasql и SQLite?
Я только начал рассматривать Lua как простой способ доступа к SQLite DLL, но натолкнулся на ошибку при попытке использовать независимый от DB модуль LuaSQL:
require "luasql.sqlite"
module "luasql.sqlite"
print("Content-type: Text/html\n")
print("Hello!")
Обратите внимание, что я пытаюсь начать с самой базовой установки, поэтому в рабочем каталоге есть только следующие файлы, а sqlite.dll фактически переименован в sqlite3.dll с сайта LuaForge:
Справочник C: \ Templuasql lua5.1.exe lua5.1.dll hello.lua Справочник C:\Temp\luasql sqlite.dll
Я скучаю по некоторым двоичным файлам, которые объяснили бы ошибку?
Спасибо.
Редактировать: я переименовал DLL в исходный файл sqlite3.dll и обновил исходный код, чтобы отразить это (первоначально переименовал его, потому что именно так он был назван в образце, который я нашел).
На данный момент, вот как выглядит код...
require "luasql.sqlite3"
-- attempt to call field 'sqlite' (a nil value)
env = luasql.sqlite()
env:close()
... и сообщение об ошибке, которое я получаю:
C:\>lua5.1.exe hello.lua
lua5.1.exe: hello.lua:4: attempt to call field 'sqlite' (a nil value)
Изменить: Найдено, что это было: env = luasql.sqlite3() вместо env = luasql.sqlite().
Для новичков, как я, вот полный пример с последним драйвером SQLite LuaSQL:
require "luasql.sqlite3"
env = luasql.sqlite3()
conn = env:connect("test.sqlite")
assert(conn:execute("create table if not exists tbl1(one varchar(10), two smallint)"))
assert(conn:execute("insert into tbl1 values('hello!',10)"))
assert(conn:execute("insert into tbl1 values('goodbye',20)"))
cursor = assert(conn:execute("select * from tbl1"))
row = {}
while cursor:fetch(row) do
print(table.concat(row, '|'))
end
cursor:close()
conn:close()
env:close()
Спасибо.
2 ответа
Не переименовывайте файл DLL: это заставит Lua не найти функцию инициализации в DLL (которая называется так же, как DLL).
Вам не нужно
module
позвони, простоrequire
,module
используется при создании модуля, а не при его использовании.
Изменить: Согласно документации LuaSQL, похоже, что вам нужно позвонить luasql.sqlite3()
вместо luasql.sqlite()
,
В отредактированном фрагменте вы загружаете luasql.sqlite3
модуль и пытается получить доступ к luasql.sqlite
Водитель. Обратите внимание, что sqlite3
это не то же самое, что sqlite
...