5

我刚开始将 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()

谢谢你。

4

2 回答 2

2
  1. 不要重命名 DLL 文件:这会导致 Lua 在 DLL 中找不到初始化函数(与 DLL 命名相同)。

  2. 你不需要module打电话,只是requiremodule在创建模块时使用,而不是在使用它时使用。


编辑:根据 LuaSQL 文档,看起来您需要调用luasql.sqlite3()而不是luasql.sqlite().

于 2010-05-05T12:31:28.193 回答
0

在您编辑的代码段中,您正在加载luasql.sqlite3模块并尝试访问luasql.sqlite驱动程序。注意sqlite3不等于sqlite...

于 2010-05-05T12:59:04.983 回答