2010-06-06 4 views
0

초기 데이터베이스가있는 앱 (세계 시간)을 출시했습니다. 이제 데이터베이스 업그레이드로 앱을 업데이트하고 싶습니다.초기 설치시 데이터베이스 버전이 0입니다.

OnUpgrade()에 업그레이드 코드를 입력하고 newVersion을 확인했습니다. 하지만 내 로컬 테스트에서 호출되지 않았습니다 ...

그래서 내가 데이터베이스 버전을 얻으려면 디버그 문을 넣어 그것은 0입니다.

버전이 지정되지 않은 이유는 무엇입니까?
마헤 - 다음

,

InputStream myInput = myContext.getAssets().open(DB_NAME); 

    // Path to the just created empty db 
    String outFileName = DB_PATH + DB_NAME; 

    //Open the empty db as the output stream 
    OutputStream myOutput = new FileOutputStream(outFileName); 

    //transfer bytes from the inputfile to the outputfile 
    byte[] buffer = new byte[1024]; 
    int length; 
    while ((length = myInput.read(buffer))>0){ 
     myOutput.write(buffer, 0, length); 
    } 

    //Close the streams 
    myOutput.flush(); 
    myOutput.close(); 
    myInput.close(); 

다음

내 생성자입니다 ...에서 OnCreate() & OnUpgrade()

public DatabaseHelper(Context context) { 

    super(context, DB_NAME, null, DB_VERSION); 
    this.myContext = context; 
} 
@Override 
public void onCreate(SQLiteDatabase db) { 

} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    if(oldVersion == 1 && newVersion == 2){ 
     String sql = "update statement...."; // i have a correct update statement here 
     db.execSQL(sql); 
    } 

} 

내 자산 폴더에서 데이터베이스를 복사하는 코드입니다
http://android.maheshdixit.com

+0

-1을 읽지 않으려면 0이 아닌 값을 입력하십시오. –

+1

'onCreate()'와'onUpgrade()'의'SQLiteOpenHelper' 구현에 대한 도움을 얻으려면'SQLiteOpenHelper'의'onCreate()'와'onUpgrade()'구현을 보여줘야합니다. – CommonsWare

+0

@Override 공개 무효에서 onCreate (dB의 SQLiteDatabase) {} \t \t @Override \t 공개 무효 onUpgrade (dB의 SQLiteDatabase, INT oldVersion, INT NEWVERSION) { \t \t 경우 (oldVersion == 1 && NEWVERSION == 2) { \t \t \t String sql = "some sql statement ..."; \t \t \t db.execSQL (sql); \t \t \t }} 공개 DatabaseHelper (컨텍스트 컨텍스트) { \t 슈퍼 (컨텍스트 DB_NAME, NULL, DB_VERSION); this.myContext = context; } – mahesh

답변

0

당신은 hav 귀하의 데이터베이스 어댑터 클래스입니다.

private static final String DATABASE_NAME = "sr4.db"; 
private static final int DATABASE_VERSION = 1;

데이터베이스 업데이트가 필요하다는 인식 응용 프로그램을 얻을 할 필요가 숫자 DATABASE_VERSION로 설정되어 변경하는 것입니다 : 그것은 다음과 같은 라인을 가지고 있습니다.

+0

답장을 보내 주셔서 감사합니다 ...하지만 이미 다음을 가지고 있습니다 private static final String DB_NAME = "WorldClock"; 개인 정적 final int DB_VERSION = 2; public DatabaseHelper (컨텍스트 컨텍스트) { \t super (컨텍스트, DB_NAME, null, DB_VERSION); this.myContext = context; } \t 또한 버전을 1로 명시 적으로 설정했지만 다음 번에 업그레이드 할 때 OnUpgrade()를 호출하지 않습니다. – mahesh

1

DB 버전을 수동으로 확인하지 않아도됩니다. SQLite가 제대로 완료되면이 작업을 수행합니다.

당신의 SQLiteOpenHelper 상속 클래스에서

, 생성자에서, 당신은이 같은 뭔가 DB_VERSION을 통과해야 만들기) 당신의에서 onCreate에서 다음

public class DBHelper extends SQLiteOpenHelper { 
    public static final String DB_NAME = "your_db_name"; 
    public static final int DB_VERSION = 2; 

    public DBHelper(Context context) { 
     super(context, DB_NAME, null, DB_VERSION); 
       ... 
     } 
    ... 
} 

을 (실행 테이블과 onUpgrade() 당신이 필요합니까 어떤 버전을 확인하지 않고 업그레이드하려면 SQLite가 이미 이것을 체크했을 때만이 메소드가 호출됩니다. onUpgrade()에서 코드를 실행해야하는 경우 DB_VERSION 변수를 늘리십시오.

0

문제점을 발견했습니다 ... OnReaderDatabases 또는 getWriteableDatabases()를 호출 할 때만 OnCreate() 및 OnUpgrade가 호출되는 것 같습니다. 그리고 DB가 존재하는 한 그들 중 한 명을 부르지 않았습니다. 대신 SQLLiteDatabase.openDatabase()를 호출하여 OnCreate 또는 OnUpgrade()를 호출하지 않았습니다.

이제 getWriteableDatabases()를 명시 적으로 호출하면 OnUpgrade()가 호출됩니다.

답장을 보내 주셔서 감사합니다.

관련 문제