Мое приложение будет корабль с SQLite базы данных в своих активов папки, которые будут копируются в папку базы данных после запуска.Android sqliteOpenHelper onUpgrade замена дб с новым одним
Теперь, когда я выпускаю новую версию своего приложения с новой базой данных sqlite, будет вызвана onUpgrade? Если бы это помогло удалить текущую базу данных и вызвать oncreate (что называется моим копированием функции базы данных)?
Ps: База данных не содержит каких-либо пользовательских данных
EDIT: Вот мой вспомогательный класс для обработки к базе данных
public class Helper_Db extends SQLiteOpenHelper{
public static final String DB_NAME = "Test.sqlite";
public static final int DB_VERSION = 3;
private static String DB_PATH = "";
private SQLiteDatabase _db;
private final Context _ctx;
public Helper_Db(Context context) {
super(context, null, null, 1);
DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
_ctx = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
try
{
copyDatabase();
Log.e("DATABASE", "Database created");
}
catch(IOException io)
{
Log.e("DATABASE", io.toString());
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
_ctx.deleteDatabase(DB_NAME);
onCreate(db);
}
private void copyDatabase() throws IOException
{
InputStream input = _ctx.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream output = new FileOutputStream(outFileName);
byte [] buffer = new byte [1024];
int length;
while((length = input.read(buffer)) > 0)
{
output.write(buffer, 0, length);
}
output.flush();
output.close();
input.close();
}
public boolean openDatabase() throws SQLException
{
String path = DB_PATH + DB_NAME;
_db = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.CREATE_IF_NECESSARY);
return _db != null;
}
@Override
public void close()
{
if(_db != null)
{
_db.close();
}
super.close();
}
}
Спасибо за ответ, я использую этот вспомогательный класс уже и не база данных не хранит какое-либо пользовательские данные, так в основном я хочу перевести базу данных для предыдущей версии приложения в стороне и скопировать загружаемая база данных новой версии приложения в папку баз данных (перезаписывать?) Является ли эта функция onUpgrade для вспомогательного класса вызывается, когда приложение обновляется до более новой версии? Любые указания для простой перезаписи базы данных? thanx –
onUpgrade не вызывается после обновления приложения. Проверьте этот конструктор и его описание: http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html#SQLiteOpenHelper%28android.content.Context,%20java.lang.String,%20android.database.sqlite .SQLiteDatabase.CursorFactory,% 20int% 29. Важным является параметр «версия». –
Хм, если вы просто хотите перезаписать базу данных после обновления вашего приложения, я думаю, что лучшее место должно быть как можно скорее после запуска приложения. В этом случае вы можете расширить класс «Приложение» и проверить, является ли начало приложения обновлением, и если это так, просто перезапишите файл базы данных, прежде чем использовать SqliteOpenHelper для работы с базой данных. Существует много других сообщений с информацией о том, как расширить класс приложений и как проверить, обновлено ли приложение (может предлагать способ благодаря сохранению параметров в SharedPreferences). –