2015-07-28 3 views
1

У меня есть много данных, которые хранятся в CSV-файле (около 20 100 строк), который мне нужно вставить в базу данных sqlite.Как вставить большой объем данных в базу данных sqlite в Android

Эта вставка занимает очень много времени. Каков самый быстрый способ вставить эти данные?

+1

Использование AsyncTask <> Вставьте 20,100 строк вставки в базу данных. Использование этой асинхронной работы отверстия работает в фоновом режиме. Для получения дополнительной информации перейдите по этой ссылке http://developer.android.com/reference/android/os/AsyncTask.html –

+0

Его занимает слишком много времени. Я тоже попробовал. @JigarShekh – abc

+0

Вы должны определить, что означает «долгое время». Если вы закодированы правильно, это не займет больше нескольких секунд. 'ContentResolver.bulkInsert' должен сделать это еще быстрее. Тем не менее, я предлагаю вам пересмотреть дизайн вашего приложения: действительно ли вам нужно вставить столько данных во время выполнения? Вы можете подумать о создании и заполнении своей базы данных при разработке приложения и включении его в свое приложение. –

ответ

0

Использование AsyncTask<>, insert 20,100 строки вставки в базу данных. Использование этой асинхронной работы выполняется в фоновом режиме. Для получения более подробной информации следуйте this link

+2

Asynctask небезопасен, если вы не контролируете ориентацию. Лучшим способом будет использование сервиса, поэтому процесс сможет завершить, даже если приложение находится в фоновом режиме или закрыто. AsyncTask не был разработан для очень длинных процессов. – deadfish

2

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

Таким образом, в целом я бы рекомендовал следующий подход

(A)

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

  2. напишите свою логику для вставки строк навалом, используйте контент resolver bulkInsert() api для этого. Я рекомендую вставлять в 100 коней за партию, вы можете реализовать проверки отката и ошибок, чтобы убедиться, что вставка идет нормально.

  3. Как только вся вставка заканчивается, вы можете отправить ее обратно в свой пользовательский интерфейс с помощью Handler and Messengers.

со всем этим вы добьетесь два основных задач

  1. Не повесить свой пользовательский интерфейс, избегая любого возможного ANR
  2. Даже если назад нажата клавиша, заверил, что работа дб идет гладко поскольку это было рассмотрено в фоновом задании.
+0

Я новичок в разработке Android, поэтому вы можете объяснить мне, как его использовать. @Techfist – abc

+0

начать кодирование, и поделиться своими усилиями поможет вам. не могу написать всю логику для вас, попробуйте сделать то, что я уже написал, если вы столкнулись с проблемой, напишите мне. – Techfist

+0

Хорошо, я постараюсь, если возникнут какие-либо вопросы, я попрошу вас снова @Techfist – abc

0

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

Использование AsyncTask не является хорошей идеей, потому что оно предназначено для коротких операций, как описано на странице http://developer.android.com/reference/android/os/AsyncTask.html. Вы также должны быть осторожны с его использованием. Изменение экрана ориентации вызывает воссоздание вида, а также задачу асинхронизации.

AsyncTasks в идеале должны быть использованы для коротких операций (несколько секунд в лучшем случае.) Если вам нужно сохранить темы, работающие в течение длительных периодов времени, настоятельно рекомендуется использовать различные интерфейсы, предоставляемые пакет java.util.concurrent, такой как Исполнитель, ThreadPoolExecutor и FutureTask.

+0

Хорошо, но я новичок в разработке Android, поэтому как его использовать? Вы можете мне помочь? @deadfish – abc

+0

Существует множество книг и онлайн-руководств, описывающих, как работает служба. Просто осмотритесь. – deadfish

Смежные вопросы