从sqlite数据库返回lua中的数组

从sqlite数据库返回lua中的数组,lua,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

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

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

您所做的是针对每一行,您只需将行数据存储在变量tempMoveName中,从而覆盖以前的值

您需要将行数据添加到表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中进行大量编码,我建议你掌握表的基本知识,因为cos表是Lua的主要数据类型。数组、列表、字典、类和几乎所有东西都是通过表实现的。这是一个开始

这与SQL或数据库无关;这是基本的Lua元素

这:

创建一个表并将该表存储到名为
tempMoveName
的(全局)变量中

这:

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

注意我说的:“将其存储在变量中”。不是“在变量中存储的表中”

这与这样做没有什么不同:

tempMoveName = 1
tempMoveName = "foo"
这不会以某种方式将字符串与整数组合在一起
tempMoveName
保持
1
,然后它被
替换为“foo”

桌子并不特别;他们的价值观就像Lua中的其他东西一样。变量保存值。所以,如果您更改了存储在变量中的值,那么您已经更改了存储在变量中的值。您没有影响值本身,只影响它存储的位置

如果在变量中存储了一个表,并且希望构建一个数组,那么应该访问表中的元素,而不是变量本身。这是以通常的方式完成的:

tempMoveName[#tempMoveName + 1] = row.movename .. " " .. row.totalcubicfeet .. " " .. row.totalitem .. "\n"
或者,您可以使用
表。插入

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

最后,如果
tempMoveName
是临时的(顾名思义),那么您应该将其声明为
local
变量。

它只打印这个
表:0x10a6516e0
它只打印这个
表:0x10a6516e0
谢谢,先生,好的会这样做的…:)
tempMoveName[#tempMoveName + 1] = row.movename .. " " .. row.totalcubicfeet .. " " .. row.totalitem .. "\n"
table.insert(tempMoveName, row.movename .. " " .. row.totalcubicfeet .. " " .. row.totalitem .. "\n")