2014-04-29 28 views
0

当我每次更新我的应用时,数据库总是变回零,并且我以前的所有进度都消失了。我刚刚添加了一个新表格,并添加了几行。我在电晕论坛上看到,我应该使用Documents Directory以便数据库不会被更新。但是当我这样做时,我的应用程序变得混乱,所以我仍然使用系统资源目录,关于如何使用我的数据库的任何提示?在不更改其值的情况下更新数据库(在表中添加新行)

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和水平等级的代码,所以这一切都简单,当我每次重新安装应用我的设备,无论是在资源目录将被保存在上该设备,从而覆盖设备中的数据库。

回答

1

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

资源目录就是资源。所以每次你重新加载应用程序时,它都会从一开始就使用你拥有的资源。根据使用情况,工作目录都是文档,临时文件和缓存。

+0

我想是什么让我在移动设备上的DocumentsDirectory(第一次安装),因为它缺席。这就是为什么我的应用程序因为无法在我的数据库中找到表而被搞砸的原因 – user3278528

相关问题