2012-07-14 43 views
1

这是我在stackoverflow的第一个问题。 我正在与科罗娜和我遇到一个问题访问SQLdb(我是一个SQL菜鸟)Corona Lua SQLite

我试图访问并返回我已经存储在数据库中的值。 下面是一些代码示例:

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()以外的其他db函数调用。我意识到每次我想访问单个条目时都可以遍历数据库,但这看起来效率不高。

任何帮助,非常感谢。

回答

1

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

+0

所以,只是要清楚。当我想要访问表中的条目时,我必须总是遍历整个数据库?没有其他方法来获取条目? – zecmo 2012-07-14 19:55:42

+0

是的,有点儿。你可以做单独的准备步骤,并在语句中完成/重置调用,但是循环并没有太多开销,因为如果只有一个结果,它将只运行一次迭代。另外,如果你只有一个结果,当有很多时,你可以从循环中断开。 – 2012-07-14 19:59:17

+0

很酷。我不太了解SQL来“分离(和)准备步骤并最终确定/重置语句中的调用。”但其他一切都有道理。非常感谢您的信息! – zecmo 2012-07-14 20:00:20

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