电晕数据库在模拟器上工作但不在Android设备上,使用故事板在前一个场景停止

时间:2013-07-16 10:58:44

标签: database sqlite storyboard corona

我正在使用数据库来保持高分记录。在故事板场景更改我使文件显示高分。我首先创建数据库,然后是表,然后检索记录。检查现在得分是否超过数据库中的现有分数。更新第一个现有记录。

它在模拟器上完美运行,但在设备上它停留在前一个场景上,并且从不将场景更改为高分文件。

在实施数据库之前,它正在改变场景。

local myData = require("myData")

    -----------------------------------------------------------------------------

    --         DATABASE
    --         SQLite

    -----------------------------------------------------------------------------

            --Include sqlite
    require "sqlite3"

    local path = system.pathForFile("myDataBaseASDF.db", system.DocumentsDirectory)
    db = sqlite3.open( path )   

    --Handle the applicationExit event to close the db
    local function onSystemEvent( event )
        if( event.type == "applicationExit" ) then              
            db:close()
        end
    end


    local tablesetup = [[CREATE TABLE IF NOT EXISTS highScoreClassic (id INTEGER PRIMARY KEY, Time, Taps);]]
    print("DB Created")
    db:exec( tablesetup )


    local dbRows = 0
    local dbTaps = 0
    local dbTime = "00:00:00"

    --print all the table contents
    for row in db:nrows("SELECT * FROM highScoreClassic WHERE id=1;") do
        dbRows = dbRows + 1
        dbTaps = row.Taps
        dbTime = row.Time
        print("Row Taken")
    end

    function isHighscore()
        if myData.currentScore > dbTime then
            return true
        elseif myData.currentScore == dbTime and myData.taps > dbTaps then
            return true
        elseif myData.currentScore == dbTime and myData.taps < dbTaps then
            return false
        else return false end
    end

    function saveToDataBase() 
        print("updating")
        local q = [[UPDATE highScoreClassic SET Time=']]..myData.currentScore..[[', Taps=]]..myData.taps..[[ WHERE id=1;]]
        db:exec( q )
    end

    function saveToDataBaseFirstTime()
        print("inserting")
        local tablefill =[[INSERT INTO highScoreClassic VALUES (NULL, ']]..myData.currentScore..[[',']]..myData.taps..[['); ]]
        db:exec( tablefill )
    end

    if ( dbRows > 0 ) then
        if ( isHighscore() ) then
            print(dbTime, dbTaps)
            myData.highScore = true
            saveToDataBase()
        else
            myData.highScore = false
            print("No HighScore")
        end

    else
        saveToDataBaseFirstTime()
    end



    --setup the system listener to catch applicationExit
    Runtime:addEventListener( "system", onSystemEvent )

2 个答案:

答案 0 :(得分:1)

请注意设备上的区分大小写的内容。它在模拟器中不区分大小写,但它在您的设备上。

还要确保您的设备的路径正确。

答案 1 :(得分:0)

模拟器DocumentsDirectory中的

文件不会包含在您的设备中。你必须再次创建文件。