2014-04-29 2 views
0

언제 내 앱을 업데이트 할 때마다 데이터베이스는 항상 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

관련 문제