【问题标题】:return array in lua from a sqlite database从 sqlite 数据库返回 lua 中的数组
【发布时间】:2012-11-23 23:08:22
【问题描述】:

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

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

【问题讨论】:

    标签: lua


    【解决方案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 给出了表格的长度(即表格中元素的数量)

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

    【讨论】:

    • 它只打印这个table: 0x10a6516e0
    • 谢谢您,先生,好的,我会这样做的... :)
    【解决方案2】:

    这与 SQL 或数据库无关;这是 基本 Lua 的东西。

    这个:

    tempMoveName = {}
    

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

    这个:

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

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

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

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

    tempMoveName = 1
    tempMoveName = "foo"
    

    这不会以某种方式将字符串与整数组合在一起。 tempMoveName 持有1,然后替换为"foo"

    桌子并不特别;它们是 values,就像 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 变量。

    【讨论】:

    • 它只打印这个table: 0x10a6516e0
    猜你喜欢
    • 1970-01-01
    • 2017-08-01
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-17
    • 2017-04-04
    相关资源
    最近更新 更多