sqlite - 如何获取只返回一行结果?(luaSQLite3)

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

SELECT * FROM sqlite_master WHERE name ='myTable';

到目前为止,我注意到:

  • 使用 "nrows"/"rows" 会返回迭代器
  • 使用 "exec" 似乎不返回结果(?)

具体问题如下:

Q1 - 如何获取单行(例如第一行)的结果?

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

原文链接 https://stackoverflow.com/questions/10343255

点赞
stackoverflow用户734069
stackoverflow用户734069

只需要循环遍历从 rows 函数或者其它函数得到的迭代器即可。在最后加上 break 命令,这样你只能迭代一次。

获取数量就是使用 SQL。你可以通过 SELECT 语句来计算:

SELECT count(*) FROM ...

这将返回一个行,其中包含一个值: 查询结果的行数。

2012-04-27 00:49:09
stackoverflow用户88888888
stackoverflow用户88888888

为了获得一行数据,可以使用 db:first_row 方法,如下所示:

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

为了获取行数,可以使用 SQL COUNT 语句,如下所示:

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-27 00:50:43
stackoverflow用户33252
stackoverflow用户33252

以下是获取返回计数的示例:

> 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-28 17:53:54
stackoverflow用户1809212
stackoverflow用户1809212

这和我在项目中使用的类似,对我很有效。

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-25 11:51:35