La base de données Sqlite onUpgrade() n'est pas appelé

Je suis en train de travailler sur une application android où j'ai utilisé la base de données sqlite dans le dossier actif. Donc j'ai fait copier la base de données à partir de ce dossier. L'utilisateur peut également enregistrer leurs propres données(marque tout contenu que favori).

J'ai téléchargé une version sur le marché. Maintenant, je veux ajouter de nouvelles données dans la base de données et mis en ligne une nouvelle version. Si l'utilisateur mise à jour de l'application sur le marché, je veux garder les données de l'utilisateur(à partir de la version précédente) et ajouter les nouvelles données ainsi. J'ai fait un peu de google et a trouvé que sur la méthode de mise à niveau devrait faire l'affaire. Mais je suis l'évolution du DATABASE_VERSION de code, mais la méthode de mise à niveau n'a pas obtenir de l'appel. Je me demandais, j'ai raté quelque chose. Voici mon code:

public class DataBaseHelper extends SQLiteOpenHelper {
private static String DB_PATH = "/data/data/riskycoder.login/databases/";
public static String DB_NAME = "datenbank_EN.sqlite";
private SQLiteDatabase myDataBase;
private final Context myContext;
private static final int DATABASE_VERSION = 1;
public DataBaseHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
this.myContext = context;
}
public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();
if (dbExist) {
} else {
this.getWritableDatabase();
try {
this.close();
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
private boolean checkDataBase() {
SQLiteDatabase checkDB = null;
try {
String myPath = DB_PATH + DB_NAME;
checkDB = SQLiteDatabase.openDatabase(myPath, null,SQLiteDatabase.OPEN_READWRITE);
} catch (SQLiteException e) {
}
if (checkDB != null)
checkDB.close();
return checkDB != null ? true : false;
}
private void copyDataBase() throws IOException {
InputStream myInput = myContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[2048];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
//myDataBase.setVersion(DATABASE_VERSION);
}
public void openDataBase() throws SQLException {
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null,SQLiteDatabase.OPEN_READWRITE);
Log.d("Test", "Database version: " +myDataBase.getVersion());
}
@Override
public synchronized void close() {
if (myDataBase != null)
myDataBase.close();
super.close();
}
@Override
public void onCreate(SQLiteDatabase db) {
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.d("Test", "in onUpgrade. Old is: " + oldVersion + " New is: " + newVersion);
}

}

  • Je suis l'évolution du DATABASE_VERSION de code.., exactement ce que cela veut dire? Je vois que vous appelez la super constructeur de la SQLiteOpenHelper avec un champ constant DATABASE_VERSION(qui, évidemment, ne peut pas être changé), alors comment voulez-vous changer la version de base de données?
  • Dans la nouvelle version de l'application, j'ai changé le DATABASE_VERSION à 2. Donc, lors de l'installation de la nouvelle version de la onUpgrade méthode doit être appelée. Ou il me manque quelque chose?
  • D'abord, le code que vous avez posté showa DATABASE_VERSION est 1, donc onUpgrade ne serait pas appelé. Deuxièmement, même si elle a été de 2, votre onUpgrade a pas de code pour faire anythign pour mettre à jour la base de données. Il ne se produit pas automatiquement, vous devez le faire.
  • Je suis face à un même problème avez-vous capable de résoudre ce problème.
  • quelqu'un peut s'il vous plaît aider moi je suis aussi face à la difficulté de mettre à niveau la base de données des actifs dossier
InformationsquelleAutor rawcoder064 | 2012-05-19