Luasql и SQLite? - PullRequest
       51

Luasql и SQLite?

5 голосов
/ 05 мая 2010

Я только начал рассматривать Lua как простой способ доступа к SQLite DLL, но натолкнулся на ошибку при попытке использовать независимый от DB модуль LuaSQL:

require "luasql.sqlite"
module "luasql.sqlite"

print("Content-type: Text/html\n")

print("Hello!")

Обратите внимание, что я пытаюсь начать с самой базовой установки, поэтому в рабочем каталоге есть только следующие файлы, а sqlite.dll фактически является переименованным sqlite3.dll с сайта LuaForge :

Directory of C:\Temp
<DIR> luasql
lua5.1.exe
lua5.1.dll
hello.lua

Directory of 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 ]

2 голосов
/ 05 мая 2010
  1. Не переименовывать файл DLL: Это приведет к тому, что Lua не найдет функцию инициализации в DLL (которая называется так же, как DLL).

  2. Вам не нужен вызов module, просто require. module используется при создании модуля, а не при его использовании.


Редактировать: Согласно документации LuaSQL, похоже, что вам нужно вызвать luasql.sqlite3() вместо luasql.sqlite().

0 голосов
/ 05 мая 2010

В отредактированном фрагменте вы загружаете модуль luasql.sqlite3 и пытаетесь получить доступ к драйверу luasql.sqlite. Обратите внимание, что sqlite3 не совпадает с sqlite ...

...