添加新列时在SQLITE中保留数据

时间:2016-09-12 15:58:51

标签: sqlite lua corona

我现在有一个应用程序Live和在应用程序中我使用sqlite表来存储游戏高分。然后当我需要添加随机播放功能时,我首先检查列是否存在,在表中添加了一个列。

当前代码

local function setupDatabase()
    local dbPath = system.pathForFile("appInfo.db3", system.DocumentsDirectory)
    local db = sqlite3.open(dbPath)

    local playerSetup = [[
        CREATE TABLE playerInfo(id INTEGER PRIMARY KEY autoincrement, highscore);
        INSERT INTO playerInfo VALUES(NULL, '0');
    ]]
    db:exec(playerSetup)

    if not dbColumnExists( db, "playerInfo", "shuffles") then
        local sql = "alter table playerInfo add column shuffles"
        db:exec(sql)
        db:close()
        M.shuffles = 3  -- Set to default
        M.savePlayerInfo()
    else
        db:close()
    end
end
setupDatabase()

现在我想添加一个保存分数功能,这是我的新代码:

local function setupDatabase()
    local dbPath = system.pathForFile("appInfo.db3", system.DocumentsDirectory)
    local db = sqlite3.open(dbPath)

    local playerSetup = [[
        CREATE TABLE playerInfo(id INTEGER PRIMARY KEY autoincrement, highscore);
        INSERT INTO playerInfo VALUES(NULL, '0');
    ]]
    db:exec(playerSetup)

    if not dbColumnExists( db, "playerInfo", "shuffles") then
        local sql = "alter table playerInfo add column shuffles"
        db:exec(sql)
        --db:close()
        M.shuffles = 3  -- Set to default
        M.savePlayerInfo()
    end
    if not dbColumnExists( db, "playerInfo", "startscore") then
        local sql = "alter table playerInfo add column startscore"
        db:exec(sql)
        M.savePlayerInfo()
        M.saveScore()
    end
    if not dbColumnExists( db, "playerInfo", "savecount") then
        local sql = "alter table playerInfo add column savecount"
        db:exec(sql)
        M.savecount = 3
        M.savePlayerInfo()
    end
    db:close()
end
setupDatabase()

问题面临:

我现在面临的问题是当有人安装LIVE应用程序并购买shuffle时,可以说shuffle有10个学分,然后安装新的更新,shuffle的10个学分被淘汰。

有没有更好的方法来确保我在数据库中保留现有的随机播放信用?

由于

加载和保存数据

M.loadPlayerInfo = function()
    local dbPath = system.pathForFile("appInfo.db3", system.DocumentsDirectory)
    local db = sqlite3.open(dbPath)
    for row in db:nrows("SELECT * FROM playerInfo WHERE id = 1") do
        M.highscore = tonumber(row.highscore)
        M.shuffles = tonumber(row.shuffles)
        M.startscore = tonumber(row.startscore)
        M.savecount = tonumber(row.savecount)
    end
    db:close()
end

M.savePlayerInfo = function()
    local dbPath = system.pathForFile("appInfo.db3", system.DocumentsDirectory)
    local db = sqlite3.open(dbPath)
    local update = "UPDATE playerInfo SET highscore='" .. M.highscore .."', shuffles='" .. M.shuffles .. "', savecount='" .. M.savecount .. "' WHERE id=1"
    db:exec(update)
    db:close()
end

0 个答案:

没有答案