每当我更新我的应用程序时,数据库总是会变回零,并且我之前的所有进度都已消失。我刚刚添加了一个新表,并添加了几行。我在电晕论坛上看到我应该使用文档目录,因此数据库不会更新。但当我这样做时,我的应用程序搞砸了,所以我仍然使用系统资源目录,有关如何使用我的数据库的任何提示?
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的代码,所以当我每次在我的设备上重新安装应用程序时,资源目录中的任何内容都将保存在设备上,因此覆盖设备中的数据库。
答案 0 :(得分:1)
据我所知,你无法写入ResourceDirectory(你可能在模拟器中但不在设备中)。您必须在DocumentsDirectory中执行此操作。我不知道你这样做会搞砸什么,但那应该就是这个地方。我有几个应用程序以这种方式工作并没有问题。
资源目录就是资源。因此,每次重新加载应用程序时,它都会使用您从一开始就拥有的资源。工作目录是Documents,Temporary和Cache,具体取决于用途。