从SQLite数据库中返回Lua数组

在 Lua 中如何从 sqlite 数据库返回数组?

我在这里有个示例代码:

function getMoveName()
    tempMoveName = {}
    for row in db:nrows("SELECT * FROM movetable") do
        tempMoveName = row.movename .. " " .. row.totalcubicfeet .. " " .. row.totalitem .. "\n"
    end
    return tempMoveName
end

这将返回数据库的内容,并使用以下代码将内容打印出来:

local displaymovenames = mydatabase.getMoveName()

print ( displaymovenames )

然而,它只返回最后一个数据,而不是所有的内容。

点赞
用户1137788
用户1137788

你正在做的是对于每一行,你只是将行数据存储在变量tempMoveName中,从而覆盖以前的值。

你需要将rowData添加到临时表tempMoveName中。

function getMoveName()
    tempMoveName = {}
    for row in db:nrows("SELECT * FROM movetable") do
        local rowData = row.movename .. " " .. row.totalcubicfeet.." "..row.totalitem.."\n"
        tempMoveName[#tempMoveName+1] = rowData
    end
    return tempMoveName
end

编辑

要访问表元素,您必须执行以下操作

for i=1,#tempMoveName do
   print(tempMoveName[i])
end

请注意,#tempMoveName给出了表的长度(即表中的元素数)

如果您要在Lua中进行大量编程,建议您掌握表的基础知识,因为表是Lua的主要数据类型。数组,列表,字典,类和几乎所有内容都通过表实现。下面是一个教程供参考!

2012-11-23 06:22:46
用户734069
用户734069

这与 SQL 或数据库无关; 这只是 基础的 Lua 部分。

这个:

tempMoveName = {}

创建了一个表并将表存储到(全局)变量 tempMoveName 中。

这个:

tempMoveName = row.movename .. " " .. row.totalcubicfeet .. " " .. row.totalitem .. "\n"

从连接其他字符串中创建一个大字符串(不要忘记 string.format),并将其存储在(全局)变量 tempMoveName 中。

注意我说的话:“将它存储在_变量_中”。而不是“存储在存储在变量中的表中”。

这和这个没有什么不同:

tempMoveName = 1
tempMoveName = "foo"

这不会以某种方式将字符串与整数组合起来。 tempMoveName 保存了 1,然后被替换为 "foo"

表不是特殊的; 它们就像 Lua 中的任何其他东西一样是_值_。 变量保存值。因此,如果更改存储在变量中的值,则已更改存储在那里的值。您没有影响值本身,只是影响了它被存储在哪里。

如果您在变量中存储了一个表,并且您想要构建一个数组,则应访问_表内_的元素,而不是变量本身。这通常是这样完成的:

tempMoveName[#tempMoveName + 1] = row.movename .. " " .. row.totalcubicfeet .. " " .. row.totalitem .. "\n"

或者,您可以使用 table.insert

table.insert(tempMoveName, row.movename .. " " .. row.totalcubicfeet .. " " .. row.totalitem .. "\n")

最后,如果 tempMoveName 是暂时的(如名称所示),则应将其声明为 local 变量。

2012-11-23 06:22:55