Nano Hash - криптовалюты, майнинг, программирование

Обновление базы данных ORMLite

В соответствии с предыдущим вопросом, который я задал (см. это), удаление и повторное -создание таблиц не будет работать очень хорошо, если я внесу изменения и добавлю новые данные после того, как я распространил приложение, потому что пользователи потеряют все свои данные.

Есть ли рекомендуемая стратегия для решения этой проблемы и/или у вас есть несколько примеров того, что я должен сделать, чтобы справиться с этой проблемой?

Спасибо

ИЗМЕНИТЬ:

Это было бы что-то вроде этого

@Override
    public void onUpgrade (SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion){
        // TODO Auto-generated method stub
            //This is why I'm currently trying
        while(oldVersion < newVersion){
            switch(oldVersion){
            case 2:
                //add new datas from version 2 here
                break;
            case 3:
                //add new datas from version 3 here
                break;
            default:
                break;
            }
            oldVersion++;
        }
            /*
        try {
            Log.i(DatabaseHelper.class.getName(), "onUpgrade");
            TableUtils.dropTable(connectionSource, Category.class, true);
            TableUtils.dropTable(connectionSource, Level.class, true);
            TableUtils.dropTable(connectionSource, Hint.class, true);
            TableUtils.dropTable(connectionSource, HintCount.class, true);
            TableUtils.dropTable(connectionSource, Question.class, true);
            // after we drop the old databases, we create the new ones
            onCreate(db, connectionSource);
        } catch (SQLException e) {
            Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e);
            throw new RuntimeException(e);
        }
            */
    }

  • Я вручную добавляю новые столбцы в БД при добавлении новых полей в объекты. Кажется, я делаю работу ORM, но другого способа не нашел. Я проверяю текущую схему и добавляю эквивалентные столбцы, чтобы orm их распознал. 11.12.2012
  • Да, но проблема, с которой я столкнулся, заключается в том, чтобы иметь элегантный способ вставлять новые записи в базу данных и сохранять те, которые уже были введены. 11.12.2012
  • Можете ли вы привести пример того, что вы хотите сделать? Изменить базу данных - часто означает изменение схемы, добавление/удаление столбцов, таблиц. Например. если вы добавите новый столбец, вы можете установить некоторые значения по умолчанию для существующих объектов в этом столбце в onUpgrade. Я должен признать, что это будет не очень элегантно. 11.12.2012
  • Вопрос отредактирован. Это не очень красиво, потому что я действительно не знаю, как я могу столкнуться с этой проблемой... Я думал об этом: 1) Если у пользователя еще нет DL приложения, будет вызван метод onCreate, и все данные будут создано 2) Если пользователь выполняет обновление приложения, я хочу, чтобы моя программа вставляла только новые записи и сохраняла старые (но как я могу это сделать??) 11.12.2012

Ответы:


1

Если вас беспокоят только новые данные, а не изменение схемы, вы можете попробовать метод createIfNotExists в ORM lite. Таким образом, в основном при каждом обновлении вы пытаетесь вставить все данные. Но будут вставлены только новые данные.

РЕДАКТИРОВАТЬ:
Другой подход может быть следующим: разделить все ваши объекты на группы, такие как: начальные объекты, первый объект обновления, второй объект обновления и так далее.

В onCreate вы создадите все объекты, повторяя все группы. В onUpgrade вы будете использовать группы в соответствии с текущей версией.

11.12.2012
  • Итак, вы говорите мне, что я должен вызвать свой метод для создания данных в методе onUpgrade и вызвать метод createIfNotExists в моем даосе. Но у моих объектов есть идентификатор, который автоматически увеличивается, поэтому, если я вызову свой метод, который создает мои данные, он будет их дублировать. Верно ? 11.12.2012
  • Я пытался это сделать. Выполнение переключения и итерация, пока oldVersion db не равна текущей версии. Но это усложняет процесс. Думаете, есть идея получше? 11.12.2012
  • Хорошо, я сделал по старинке с переключателем и итерацией. Я принимаю ваш ответ как решенный, потому что на данный момент я не нашел лучшего решения :( Спасибо 11.12.2012
  • @ZouZou, ты нашел какое-нибудь хорошее решение этой проблемы? В настоящее время я сталкиваюсь с этой проблемой, и мне не повезло с обновлениями базы данных. 19.11.2014
  • @Pro.metal Я использовал переключатель. См. раздел stackoverflow.com/questions/13782084/. 20.11.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..