Gul*_*har 5 windows sqlite lua luasql
我刚开始将Lua看作是访问SQLite DLL的简单方法,但在尝试使用与DB无关的LuaSQL模块时遇到了错误:
require "luasql.sqlite"
module "luasql.sqlite"
print("Content-type: Text/html\n")
print("Hello!")
Run Code Online (Sandbox Code Playgroud)
请注意,我正在尝试从最基本的设置开始,因此只在工作目录中包含以下文件,而sqlite.dll实际上是从LuaForge站点重命名的sqlite3.dll :
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()
Run Code Online (Sandbox Code Playgroud)
...以及我收到的错误消息:
C:\>lua5.1.exe hello.lua
lua5.1.exe: hello.lua:4: attempt to call field 'sqlite' (a nil value)
Run Code Online (Sandbox Code Playgroud)
编辑:发现它是什么: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()
Run Code Online (Sandbox Code Playgroud)
谢谢.
不要重命名DLL文件:这会导致Lua找不到DLL中的初始化函数(与DLL同名)。
您不需要打电话module,只需require。module在创建模块时使用,而不是在使用模块时使用。
编辑:根据 LuaSQL 文档,看起来您需要调用luasql.sqlite3()而不是luasql.sqlite().
| 归档时间: |
|
| 查看次数: |
3762 次 |
| 最近记录: |