2012-06-05 2 views
0

Welcome. 이 방법으로 갱신
데이타베이스 :데이터베이스 업데이트

public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    if (newVersion > oldVersion) { 
     Log.e("TAG", "New database version exists for upgrade."); 

     try { 
      Log.e("TAG", "Copying database..."); 
      copyDataBase(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 

} 

문제는 내가 통계의 데이터베이스에서 테이블을 가지고있다, 나는 새 데이터베이스로 복사됩니다이 테이블의 데이터를 주문하고 싶었다.

어떻게하면됩니까? 예를 물어보십시오.

불쌍한 영어에 감사드립니다.


나는이하려고 노력 :

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    if (newVersion > oldVersion) { 
     Log.e("TAG", "New database version exists for upgrade."); 

     db.beginTransaction(); 
     try { 
      Log.e("TAG", "Copying database..."); 
      this.getReadableDatabase(); 
      ArrayList<Statystyka> statystyki = getAllStatistic(); 
      copyDataBase(); 
      for (int i = 0; statystyki.size() >= i; i++) { 
       addStat(statystyki.get(i).getId_pytania(), 
         statystyki.get(i).getIlosc_rozwiazan(), statystyki 
           .get(i).getIlosc_poprawnych(), statystyki 
           .get(i).getIlosc_blednych()); 
      } 
      db.setTransactionSuccessful(); 
     } catch (IOException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     db.endTransaction(); 
    } 

} 

을하지만 오류 얻을 :

java.lang.IllegalStateException :

가 어떻게에 데이터베이스를 열 않는 재귀라는 getReadableDatabase을 데이터를로드 하시겠습니까?

답변

0

데이터베이스를 업그레이드 한 후에도 이전 테이블은 그대로 유지되며 새로운 스키마 버전으로 변경하면됩니다. this documentation을 참조하십시오. 예를 들어 대한

::
는 테이블 ::

String alter_table_command=" ALTER TABLE " + TABLE_NAME + " ADD COLUMN " + NEW_COLUMN + " TEXT; "; 
db.execSQL(alter_table_command); 

읽기 ALTER 표 here에 대한 새 열을 추가 할 필요가 말한다.

참고 : 다른 데이터베이스에서 테이블을 복사하려는 경우 위의 @vipul에서 제안한대로 솔루션을 사용하십시오.

+0

이미 새 열을 추가하는 방법을 알고 있으며 이제 새 테이블을 이전 데이터로 채우는 방법을 알고 있습니까? – kurdak

0

onUpgrade는 새 데이터베이스를 만들지 않습니다. 새 열이나 테이블을 만들거나 데이터베이스의 데이터를 새 버전과 호환되도록 업데이트 할 수 있습니다.

따라서 새 데이터베이스로 데이터를 복사 할 필요는 없습니다.

관련 문제