2011-09-23 5 views
3

Android 애플리케이션에서 데이터베이스를 업데이트하려고합니다. 버전 번호를 업데이트하면 onUpgrade가 호출되지만 버전 번호가 증가하지 않으므로 데이터베이스에 액세스 할 때마다 onUpgrade가 호출됩니다. 여기 내 코드는 다음과 같습니다 이런 일이 왜onUpgrade 데이터베이스 안드로이드 버전 번호가 증가하지 않습니다

private final static int DB_VERSION = 8; 

     public DataBaseHelper(Context context) { 

     super(context, DB_NAME, null, DB_VERSION); 
     this.myContext = context; 
    } 
     @Override 
    public void onCreate(SQLiteDatabase db) { 
     Log.d(TAG, "in onCreate"); 
     try { 
      copyDataBase(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     Log.d(TAG, "in onUpgrade. Old is: " + oldVersion + " New is: " + newVersion); 
     myContext.deleteDatabase(DB_NAME); 
     Log.d(TAG, "the version is " + db.getVersion()); 
     db.setVersion(newVersion); 
     Log.d(TAG, "the version is " + db.getVersion()); 
     onCreate(db);   
    } 

누구나 알아?

+0

아마도이 링크가 도움이 될 수 있습니다. http://stackoverflow.com/questions/7173896/onupgrade-database-oldversion-newversion –

+0

나는이 링크를 이미 보았습니다 ... 나는 아직도 그것을 이해할 수 없습니다. 데이터베이스 버전 번호가 정적 인 경우에도 버전 번호는 onUpgrade()에서 업그레이드되지 않습니다. OnUpgrade가 호출되었지만 나중에 버전 번호가 업데이트되지 않습니다. – coder

+0

onUpgrade가 호출 될 때 oldVersion 및 newVersion의 값은 무엇입니까? –

답변

0

. 나는 그 최선의 해결책이 아니라는 것을 안다. 그러나 그것은 효과적이다. 이번에 앱을 업그레이드하면 이전 데이터베이스 대신 새 데이터베이스가 작성됩니다. 이전 버전이 존재하는지 확인하고, 이전 버전이 있으면 삭제합니다.

2

버전을 수동으로 설정하지 마십시오. (이것은 모두 처리됩니다.)

데이터베이스를 삭제하지 마십시오. 업그레이드 중입니다. 삭제 한 데이터베이스의 버전을 수동으로 설정해도 제대로 작동하지 않는다는 사실에 놀라지 않을 것입니다.

onUpgrade에서해야 할 일은 테이블의 구조를 변경해야합니다. 현재 테이블 (데이터베이스가 아님)을 삭제 한 다음 다시 작성하면이 작업을 수행 할 수 있습니다.

당신이 당신의 테이블에 데이터를 보존해야하는 경우

은 그것을 수행하는 방법에 대한 제안이 질문에 봐 : 나는 자산 폴더에 다른 데이터베이스를 추가 결국 Upgrade SQLite database from one version to another?

+0

api에 따르면 context.deleteDatabase()는 전체 데이터베이스를 삭제합니다. 구조와 모든 2000+ 항목의 데이터베이스가 변경되어야하기 때문에 전체를 삭제하려고한다고 생각합니까? 모든 테이블도 변경해야합니다 ... – coder

+0

아니요, 데이터베이스를 삭제하려고하면 심각하게 문제가 발생할 것입니다. 그냥 테이블을 삭제하고 다시 만듭니다. –

+0

전체 데이터베이스가 아닌 assets 폴더의 테이블 만 재 작성하려면 어떻게해야합니까? – coder

관련 문제