sqlite - 如何获得一行结果? (luaSQLite3)

时间:2012-04-27 00:35:48

标签: sqlite lua corona

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

SELECT * FROM sqlite_master WHERE name ='myTable';

到目前为止,我注意到了:

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

具体问题是:

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

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

4 个答案:

答案 0 :(得分:3)

为了获得单行,请使用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)

答案 1 :(得分:2)

只需循环遍历迭代器,即从rows或您使用的任何函数返回。除了你在最后添加一个break,所以你只需要迭代一次。

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

SELECT count(*) FROM ...

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

答案 2 :(得分: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
> 

答案 3 :(得分: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"