我正在创建一个游戏,当它完成时,它会将其存储在数据库中(下面的代码将其添加)
-- open SQLite database, if it doesn't exist, create database
local path = system.pathForFile("leaderboards.sqlite", system.DocumentsDirectory)
db = sqlite3.open( path )
print(path)
-- setup the table if it doesn't exist
local tablesetup = "CREATE TABLE IF NOT EXISTS leaderboards (id INTEGER PRIMARY KEY, score INDEXED);"
db:exec( tablesetup )
print(tablesetup)
-- save student data to database
local tablefill = "INSERT INTO leaderboards VALUES (NULL,'" .. score .. "');"
print(tablefill)
db:exec( tablefill )
-- close database
db:close()
print("db closed")
然后我想在屏幕顶部显示最高分,这是我的显示功能
local function highScore()
-- open database
local path = system.pathForFile("leaderboards.sqlite", system.DocumentsDirectory)
db = sqlite3.open( path )
print(path)
--print all the table contents
local sql = "SELECT MAX(score) FROM leaderboards"
local val = db:exec(sql)
local t = display.newText("Best: "..val, 300, -20, nil, 28)
print(val)
t:setTextColor(255,255,255)
db:close()
end
现在在屏幕上它只是说0而不是高分或任何屏幕。这些值正在数据库中输入,但我的sql语句没有显示它。
答案 0 :(得分:1)
最简单的方法是
local val
for x in db:urows "SELECT MAX(score) FROM leaderboards" do val = x end
或者
local sql = "SELECT MAX(score) FROM leaderboards"
for val in db:urows(sql)
local t = display.newText("Best: "..val, 300, -20, nil, 28)
print(val)
t:setTextColor(255,255,255)
end
请参阅urows
文档here。
答案 1 :(得分:0)
来自the docs:
分贝:EXEC 分贝:EXEC(SQL [,FUNC [,UDATA]]) 分贝:执行(SQL [,FUNC [,UDATA]])
编译并执行字符串sql中给出的SQL语句。该 语句只是一个接一个地执行而不是存储。该 函数返回sqlite3.OK成功或否则返回数字错误代码 (参见数值误差和结果代码)。
如果一个或多个SQL语句是查询,那么回调 func中指定的函数为查询的每一行调用一次 结果(如果func为nil,则不调用回调)。回调收到 四个参数:udata(db:exec()调用的第三个参数),. 行中的列数,包含列值的表和 另一个包含列名的表。回调函数应该 返回0.如果回调返回非零值,则查询为 中止,所有后续SQL语句都被跳过,db:exec() 返回sqlite3.ABORT。
在您的代码中,local val
收到的sqlite3.OK可能等于0
。您需要提供一个回调函数来接收行数据,例如
local function maxscorecb(udata, ncols, colvals, colnames)
--Assuming that it's always one row and value
udata[1] = colvals[1]
return 0
end
--print all the table contents
local sql = "SELECT MAX(score) FROM leaderboards"
local scoretab = {}
local val = db:exec(sql, maxscorecb, scoretab)
local t = display.newText("Best: "..scoretab[1], 300, -20, nil, 28)
print(val)
t:setTextColor(255,255,255)
db:close()
P.S。没有测试过,只是基于阅读文档。