0

如何从 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 )

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

4

2 回答 2

1

您所做的是对每一行,您只需将行数据存储在变量 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给出了表格的长度(即表格中的元素数)

PS 如果你打算在 Lua 中进行大量编码,我建议你掌握 Tables 的基础知识,因为表是 Lua 的主要数据类型。数组、列表、字典、类和几乎所有东西都是通过表实现的。这是一个入门教程

于 2012-11-23T06:22:46.630 回答
1

这与 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-23T06:22:55.287 回答