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 で多くのコーディングを行う場合は、テーブルの基本を理解することをお勧めします。cos テーブルは 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 に答える