나는 모든 응용 프로그램에서 조용하게 SQLiteOpenHelper (아래 참조)를 사용하고 있습니다. 기존 데이터베이스에 대한 많은 업그레이드가 수년 동안 성공적으로 끝났습니다.스레드에서 SQLite를 어떻게 업그레이드해야합니까?
이번에는 내 앱 중 하나에서 데이터베이스를 업그레이드해야하며이 단계는 얼마 동안 지속될 것입니다. 그래서 나는이 업그레이드 문을 그들 자신의 스레드에 넣어야한다.
가장 적합한 곳은 무엇입니까?
어떤 도움
높게 평가된다.public class MySQLiteOpenHelper extends SQLiteOpenHelper {
protected static final Object lock = new Object();
private static final int DATABASE_NAME = "mydatabase.db";
private static final int DATABASE_VERSION = 3;
private Context context;
private SQLiteDatabase database;
public MySQLiteOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
this.context = context;
}
@Override
public void onCreate(SQLiteDatabase database) {
synchronized (lock) {
this.database = database;
// Create database statements
}
}
@Override
public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) {
synchronized (lock) {
this.database = database;
switch (newVersion) {
case DATABASE_VERSION:
switch (oldVersion) {
case 1:
upgradeFrom1To2();
case 2:
upgradeFrom2To3();
}
break;
}
}
}
private void upgradeFrom1To2() {
// Upgrade database statements
}
private void upgradeFrom2To3() {
// Upgrade database statements
}
}
'onUpgrade' 메서드가 (스레드에서) 호출되도록 트리거하는 데이터베이스를 여는 스레드를 시작할 수 있습니다 ('getWritableDatabase' 호출로 충분합니다). –
감사합니다. 그것을 시작하는 가장 좋은 방법은 무엇입니까 (응용 프로그램을 확장합니까?) 및 업 그레 이드에서 실행되는 스레드가 끝날 때까지 응용 프로그램을 일시 중지하는 방법은 무엇입니까? –