1

这是我在 stackOverflow 上的第一个问题。我正在使用 Corona,但在访问 SQLdb 时遇到问题(我有点 SQL 菜鸟。)

我正在尝试访问并返回我存储在数据库中的值。以下是一些代码示例:

print("---------------- How I Create New Player Save Data")
local entry = [[CREATE TABLE IF NOT EXISTS playerData (key STRING PRIMARY KEY, content INTEGER);]]
db:exec(entry)

entry = [[INSERT INTO playerData VALUES ("LastLoginTime", 0);]]
db:exec( entry )
entry = [[INSERT INTO playerData VALUES ("Credits", 1000);]]
db:exec( entry )
entry = [[INSERT INTO playerData VALUES ("Level", 1);]]
db:exec( entry )

现在这个函数可以工作了,它将打印数据库中的所有内容(我传入'dbName'):

--print all the table contents
for row in db:nrows("SELECT * FROM "..dbName) do
  local text = row.key..":  "..row.content
end

这不起作用,它返回“0”:

local grabCredits = "SELECT content FROM playerData WHERE key='Credits'"
  local credits = db:exec(grabCredits)
  print("-- value: "..credits)

这也没有,也返回“0”:

local grabCredits = "SELECT key FROM playerData WHERE content>=10"
  local credits = db:exec(grabCredits)
  print("-- value: "..credits)

我不明白我做错了什么。也许我需要在数据库上使用除 exec() 之外的另一个函数调用。我意识到每次我想访问单个条目时都可以遍历数据库,但这似乎效率低下。

很感谢任何形式的帮助。

4

2 回答 2

1

如果你想要结果,你必须使用某种形式的迭代器。SQLite 总是返回查询结果的

于 2012-07-14T19:50:03.640 回答
0

这类似于我用来从我的数据库中检索一个结果的方法,并且对我来说效果很好。

local query = "SELECT content FROM playerData WHERE key = 'Credits' 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
于 2014-11-25T11:46:58.413 回答