我刚开始学习Lua作为一种简单的访问SQLite DLL的方式,但是在尝试使用DB-agnostic LuaSQL模块时遇到了错误:
require "luasql.sqlite"
module "luasql.sqlite"
print("Content-type: Text/html\n")
print("Hello!")
请注意,我正在尝试从最基本的设置开始,所以工作目录中只有以下文件,并且sqlite.dll实际上是来自LuaForge网站的重命名的sqlite3.dll:
C:\Temp的目录 <DIR> luasql 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()
... and the error message I'm getting:
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()
谢谢你。
感谢您的选择。
lua: sql.lua:3: attempt to index global 'luasql' (a nil value)
。这是因为require
不再定义全局变量。将第一行更改为luasql = require "luasql.sqlite3"
将解决该问题。 - user1704650