3

如何从 sql 语句中获取单行结果(例如,以表/数组的形式)。使用 Lua Sqlite (LuaSQLite3)。比如这个:

SELECT * FROM sqlite_master WHERE name ='myTable';

到目前为止,我注意到:

  • 使用“nrows”/“rows”它返回一个迭代器
  • 使用“exec”它似乎没有返回结果(?)

那么具体的问题是:

Q1 - 如何获得单行(比如第一行)结果?

Q2 - 如何获得行数?(例如 num_rows_returned = db:XXXX(sql))

4

4 回答 4

3

为了获得单行,请使用该db:first_row方法。像这样。

row = db:first_row("SELECT `id` FROM `table`")
print(row.id)

为了获得行数,请使用 SQLCOUNT语句。像这样。

row = db:first_row("SELECT COUNT(`id`) AS count FROM `table`")
print(row.count)

编辑:啊,对不起。以下是一些应该有效的方法。

您也可以使用db:nrows. 像这样。

rows = db:nrows("SELECT `id` FROM `table`")
row = rows[1]
print(row.id)

我们也可以修改它来获取行数。

rows = db:nrows("SELECT COUNT(`id`) AS count FROM `table`")
row = rows[1]
print(row.count)
于 2012-04-27T00:50:43.197 回答
2

rows只需循环从您使用的或您使用的任何函数返回的迭代器。除了你把 abreak放在最后,所以你只迭代一次。

获得计数就是使用 SQL。您可以使用 SELECT 语句计算它:

SELECT count(*) FROM ...

这将返回包含单个值的一行:查询中的行数。

于 2012-04-27T00:49:09.117 回答
2

这是获取返回计数的演示:

> require "lsqlite3"
> db = sqlite3.open":memory:"
> db:exec "create table foo (x,y,z);"
> for x in db:urows "select count(*) from foo" do print(x) end
0
> db:exec "insert into foo values (10,11,12);"
> for x in db:urows "select count(*) from foo" do print(x) end
1
> 
于 2012-04-28T17:53:54.390 回答
1

这与我在项目中使用的类似,并且对我来说效果很好。

local query = "SELECT content FROM playerData WHERE name = 'myTable' LIMIT 1"

local queryResultTable = {}

local queryFunction = function(userData, numberOfColumns, columnValues, columnTitles)

    for i = 1, numberOfColumns do

        queryResultTable[columnTitles[i]] = columnValues[i]

    end

end

db:exec(query, queryFunction)

for k,v in pairs(queryResultTable) do

    print(k,v)

end

您甚至可以将值连接到查询中以放置在通用方法/函数中。

local query = "SELECT * FROM ZQuestionTable WHERE ConceptNumber = "..conceptNumber.." AND QuestionNumber = "..questionNumber.." LIMIT 1"
于 2014-11-25T11:51:35.213 回答