У меня есть одно приложение для Android, которое имеет базу данных sqllite, расположенную в папке с ресурсами. Я опубликовал приложение в playstore с версией базы данных = null, чем версия базы данных = 1, версия базы данных = 2 и теперь хочу опубликовать приложение с версией базы данных = 3. У меня есть условие для удаления последних данных и копирования новых данных при обновлении. его работа, если у пользователя есть приложение, установленное с версией 2, если у пользователя есть база данных версии 1, чем его, к сожалению, остановлена на основной деятельности. Что является проблемой в моем состоянии для базы данных копий? Мой класс помощника базы данных выглядит следующим образом. БлагодаряSQLlite DataBase on Upgrade Application
public class DataBaseHandler extends SQLiteOpenHelper {
\t private static String DB_PATH;
\t private static String DB_NAME = "SuccessQuotesNew";
\t private SQLiteDatabase myDataBase;
\t private static int DATABASE_VERSION = 1;
\t private final Context myContext;
\t public DataBaseHandler(Context context) {
\t \t super(context, DB_NAME, null, DATABASE_VERSION);
\t \t this.myContext = context;
\t \t DB_PATH = context.getDatabasePath(DB_NAME).toString();
\t \t Log.e("path", DB_PATH);
\t }
\t public void createDataBase() throws IOException {
\t \t boolean dbExist = checkDataBase();
\t \t if(dbExist)
\t \t {
\t \t if(DATABASE_VERSION == 2)
\t \t {
\t \t \t
\t \t \t try {
\t \t \t \t copyDataBase();
\t \t \t \t DATABASE_VERSION = 3;
\t \t \t } catch (IOException e) {
\t \t \t \t throw new Error("Error copying database");
\t \t \t }
\t \t \t
\t \t }else
\t \t {
\t \t SQLiteDatabase database = null;
\t \t database = this.getWritableDatabase();
\t \t String query_count = "SELECT version FROM users";
\t \t \t \t
\t \t Cursor c_count = database.rawQuery(query_count, null);
\t \t
\t \t
\t \t c_count.moveToFirst();
\t \t Integer count = c_count.getInt(c_count.getColumnIndex("version"));
\t if(count == DATABASE_VERSION)
\t {
\t \t
\t }else
\t {
\t \t this.getReadableDatabase();
\t \t try {
\t \t \t copyDataBase();
\t \t } catch (IOException e) {
\t \t \t throw new Error("Error copying database");
\t \t }
\t }
\t }
\t \t }else
\t \t {
\t \t \t this.getReadableDatabase();
\t \t \t try {
\t \t \t \t copyDataBase();
\t \t \t \t DATABASE_VERSION = 2;
\t \t \t } catch (IOException e) {
\t \t \t \t throw new Error("Error copying database");
\t \t \t }
\t \t }
\t \t \t
\t }
\t private boolean checkDataBase() {
\t \t SQLiteDatabase checkDB = null;
\t \t try {
\t \t \t String myPath = DB_PATH;
\t \t \t checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
\t \t } catch (SQLiteException e) {
\t \t \t // database does't exist yet.
\t \t }
\t \t if (checkDB != null) {
\t \t \t checkDB.close();
\t \t }
\t \t return checkDB != null ? true : false;
\t }
\t private void copyDataBase() throws IOException {
\t \t // Open your local db as the input stream
\t \t InputStream myInput = myContext.getAssets().open(DB_NAME);
\t \t // Path to the just created empty db
\t \t String outFileName = DB_PATH;
\t \t // Open the empty db as the output stream
\t \t OutputStream myOutput = new FileOutputStream(outFileName);
\t \t // transfer bytes from the inputfile to the outputfile
\t \t byte[] buffer = new byte[1024];
\t \t int length;
\t \t while ((length = myInput.read(buffer)) > 0) {
\t \t \t myOutput.write(buffer, 0, length);
\t \t }
\t \t // Close the streams
\t \t myOutput.flush();
\t \t myOutput.close();
\t \t myInput.close();
\t }
\t // ==============================================================================
\t public void openDataBase() throws SQLException {
\t \t // Open the database
\t \t String myPath = DB_PATH;
\t \t myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);
\t }
\t // ==============================================================================
\t @Override
\t public synchronized void close() {
\t \t if (myDataBase != null)
\t \t \t myDataBase.close();
\t \t super.close();
\t }
\t // ==============================================================================
\t @Override
\t public void onCreate(SQLiteDatabase db) {
\t }
\t // ==============================================================================
\t @Override
\t public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
\t \t
\t \t
\t }
}
и что должно быть, если версия базы данных 2? –
Спасибо, босс. Извините, я мало начинаю и так сталкиваюсь с проблемами. Его рабочий штраф без каких-либо проблем :) –
@RajubhaiRathod Проверьте мой ответ –