Вставить запись в таблицу, если она не существует в приложении iPhone - PullRequest
0 голосов
/ 27 ноября 2011

Я получаю массив json из URL и вставляю данные в таблицу. Поскольку содержимое URL-адреса может быть изменено, я хочу установить второе подключение к URL-адресу, проверить наличие обновлений и вставить новые записи в таблицу y, используя sqlite3.

Проблемы, с которыми я сталкиваюсь:

1) В моей таблице нет первичного ключа

2) URL перечисляет изменения в тот же день. Следовательно, если я запускаю свое приложение несколько раз, когда я вставляю значения в базу данных, я получаю повторяющиеся записи. Я хочу сохранить чек на день дублированных записей, которые должны быть удалены. Эту проблему можно решить, добавив ограничение, но поскольку в URL-адресе есть повторяющиеся значения, мне сложно.

Ответы [ 3 ]

0 голосов
/ 28 ноября 2011

Я вижу две возможности в зависимости от вашей настройки:

  1. У вас есть настройка колонки как УНИКАЛЬНАЯ (это может быть через ПЕРВИЧНЫЙ КЛЮЧ или нет).В этом случае вы можете использовать предложение ON CONFLICT:

    http://www.sqlite.org/lang_conflict.html

    Если вы находите эту конструкцию немного запутанной, вы можете вместо этого использовать "INSERT OR REPLACE" или "INSERT OR IGNORE"как описано здесь:

    http://www.sqlite.org/lang_insert.html

  2. У вас нет настройки колонки как УНИКАЛЬНОЙ.В этом случае вам сначала нужно будет выбрать SELECT, чтобы проверить наличие дублирующихся данных, и на основе результата INSERT, UPDATE или ничего не делать.

0 голосов
/ 28 ноября 2011

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

0 голосов
/ 27 ноября 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...