更新数据库而不更改其值(在表中添加新行)

时间:2014-04-29 02:29:42

标签: lua corona

每当我更新我的应用程序时,数据库总是会变回零,并且我之前的所有进度都已消失。我刚刚添加了一个新表,并添加了几行。我在电晕论坛上看到我应该使用文档目录,因此数据库不会更新。但当我这样做时,我的应用程序搞砸了,所以我仍然使用系统资源目录,有关如何使用我的数据库的任何提示?

local path = system.pathForFile("database/inventorydb.db",system.ResourceDirectory)
db = sqlite3.open(path)


            db:exec([[UPDATE tbl]].. selectedStageH1 ..[[ SET count = ']]..yogurtNumber..[[' WHERE type = 'yogurt']])
            db:exec([[UPDATE tbl]].. selectedStageH1 ..[[ SET count = ']]..waffleNumber..[[' WHERE type = 'waffle']])
            db:exec([[UPDATE tbl]].. selectedStageH1 ..[[ SET count = ']]..smoothieNumber..[[' WHERE type = 'smoothie']])
            db:exec([[UPDATE tbl]].. selectedStageH1 ..[[ SET count = ']]..coffeeNumber..[[' WHERE type = 'coffee']])
            db:exec([[UPDATE money SET pera = ']]..moneyAddition..[[' WHERE id = '1']])
            if realRating >= 1 then
                nextLevel = lvlNumber + 1
                db:exec([[UPDATE levels SET status = 'done' WHERE level = ']]..nextLevel..[[']])
            end
            if realRating >= currentRating then
                db:exec([[UPDATE ratingdb SET stars = ']]..realRating..[[' WHERE level = ']]..lvlNumber..[[']])
            end
            local options = {

                    effect = "fade", time = 500, params = { selectedStage = selectedStageH1,}
                            }

所以基本上这一切都很简单我提供了连接字符串以及更新levelstate和level rating的代码,所以当我每次在我的设备上重新安装应用程序时,资源目录中的任何内容都将保存在设备上,因此覆盖设备中的数据库。

1 个答案:

答案 0 :(得分:1)

据我所知,你无法写入ResourceDirectory(你可能在模拟器中但不在设备中)。您必须在DocumentsDirectory中执行此操作。我不知道你这样做会搞砸什么,但那应该就是这个地方。我有几个应用程序以这种方式工作并没有问题。

资源目录就是资源。因此,每次重新加载应用程序时,它都会使用您从一开始就拥有的资源。工作目录是Documents,Temporary和Cache,具体取决于用途。