Андроидальная база данных sqlite для предварительного заполнения

У меня есть база данных sqlite в моем приложении. Мое приложение не должно отправлять это как пустую базу данных, но некоторые записи необходимо создать, прежде чем пользователь сможет использовать приложение в первый раз. Конечно, у меня может быть много вставных утверждений, но это кажется очень странным. Я подумал о чем-то вроде http://vineetyadav.com/tutorials/11-adding-prefilled-sqlite-database-to-android-app.html, который в основном работает, но это означает, что для моей вручную созданной БД нужны все внутренние таблицы, такие как android_metadata также. Поэтому мне нужно знать, какие внутренние таблицы существуют и как их заполнять. Или еще один умный способ иметь предварительно заполненную базу данных. Какие-либо предложения?

Спасибо.

Solutions Collecting From Web of "Андроидальная база данных sqlite для предварительного заполнения"

Вы можете прочитать в плоском файле с SD-карты с 1 вставкой для каждой строки и повторить этот файл.

Вот пример, в котором я читал файл и добавляю ContactItem в мой контакт-лист:

 public ArrayList<ContactItem> readInputFile(Context context, String filename) { String text = null; BufferedReader reader = null; ArrayList<ContactItem> contact_list = new ArrayList<ContactItem>(); contact_list.clear(); // Clear any existing contacts when a new file is read try { reader = new BufferedReader(new FileReader(filename)); // Repeat until EOF while (((text = reader.readLine()) != null)) { if (!(text.length() > 1024)) { // If we read more than 1k per line there's a problem with the input file format ContactItem c = new ContactItem(text); if (c.getIsValid()) { // We were able to parse a well formed phone number from the last line read contact_list.add(c); } } } } catch (FileNotFoundException e) { Toast.makeText(context, R.string.error_fileNotFound, 1).show(); e.printStackTrace(); } catch (IOException e) { Toast.makeText(context, R.string.error_ioException, 1).show(); e.printStackTrace(); } finally { // EOFException (or other, but EOF is handled and most likely) try { if (reader != null) { reader.close(); } } catch (IOException e) { Toast.makeText(context, R.string.error_generalFailure, 1).show(); e.printStackTrace(); } } return contact_list; } 

Лично я просто делал вставки, но у меня было всего 2, поэтому для меня это не показалось.

Если вам нужно знать внутренние таблицы, почему бы вам просто не извлечь базу данных из своего приложения и не взглянуть на нее с любым SQLite-браузером баз данных (я использую SQLite Database Browser )?

Android_metadata отображается в SQLite Database Browser как созданный CREATE TABLE android_metadata(locale TEXT) например.

Возможно, вставьте заявление, чтобы убедиться, что это будет выглядеть.

Тогда вы можете легко воссоздать его и добавить?

Я сохранил данные в каталоге res / raw как JSON. Когда приложение было открыто в первый раз, я использовал AsyncTask, прочитал файл JSON (использовал библиотеку GSON) и заполнил мою базу данных.

Я пробовал это около 1000 записей, и это сработало для меня. Это продолжалось некоторое время – около 15-30 секунд на эмуляторе.

Не уверен, что это лучший способ.