我刚开始将 Lua 视为访问 SQLite DLL 的一种简单方法,但在尝试使用与 DB 无关的 LuaSQL 模块时遇到了错误:
require "luasql.sqlite"
module "luasql.sqlite"
print("Content-type: Text/html\n")
print("Hello!")
请注意,我尝试从最基本的设置开始,因此工作目录中只有以下文件,而 sqlite.dll 实际上是来自LuaForge站点的重命名的 sqlite3.dll:
C:\Temp 目录 <目录> luasql lua5.1.exe lua5.1.dll 你好.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()
谢谢你。