Я тестирую возможности устройства - показать заказчику размер данных, которые могут быть сохранены внутри устройства, как быстро его можно найти, как быстро поиск работает и т. Д.Android SQLite: как создать большую таблицу для целей тестирования?
Я использую моему провайдеру контента для доступа к таблице базы данных product
с несколькими столбцами. Я уже переместил код в контент-провайдер, чтобы избежать дополнительной связи при вставке тестовых записей. Следующий код вызывается через меню из деятельности, чтобы заполнить таблицу с содержанием испытательной
Uri uri = Uri.parse(DemoContentProvider.PRODUCTS_CONTENT_URI + "/insertdemo");
getContentResolver().insert(uri, null);
URI, распознаваемый в .insert
методом контент-провайдера и следующего частного метода (одного и того же контента провайдера) является призван заполнить таблицу (обратите внимание на 100 тысяч предметов):
private void insertDemoProducts() {
for (int i = 1; i <= 100000; ++i) {
String id = Integer.toString(i);
insertProduct(id, "Test product " + id, "100", "75.50", "70.27");
}
}
внутренний insertProduct()
выглядит следующим образом:
private void insertProduct(String code, String name, String stock,
String price, String listprice) {
SQLiteDatabase sqlDB = database.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(ProductTable.COLUMN_CODE, code);
values.put(ProductTable.COLUMN_NAME, name);
values.put(ProductTable.COLUMN_STOCK, stock);
values.put(ProductTable.COLUMN_PRICE, price);
values.put(ProductTable.COLUMN_LISTPRICE, listprice);
sqlDB.insert(ProductTable.TABLE_PRODUCT, null, values);
}
Это работает, но он принимает «навсегда». Как я могу сделать это быстрее? Какой самый быстрый метод вы знаете, чтобы заполнить таблицу?
Просто некоторые номера для рассмотрения: 1000 предметов занимают около 20 секунд.
Я не могу проверить это сейчас, но как дополнительная функциональность (транзакция) может ускорить работу? Можете ли вы указать мне какую-либо документацию, объясняющую причину? – pepr
Метод beginTransaction сообщает базе данных, что вы собираетесь начать транзакцию, и что ей не нужно ничего записывать в sd до тех пор, пока не будет запущен метод endTransaction. Затем он оценивает, было ли изменение базы данных успешным, и в этом случае он записывает все изменения сразу или, если это не удается, т. Е. SetTransactionSuccessful не был запущен, он делает откат. Вы можете прочитать больше в [SQLiteDatabase] (http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html) в документации – Dean
Надеюсь, я понимаю механизм транзакций. Однако при использовании транзакций вставка в db должна быть выполнена в любом случае. Кроме того, необходимо создать дополнительные структуры данных для реализации механизма транзакции. Тогда почему простая «вставка» без транзакции сложнее, чем «вставить» плюс транзакцию? – pepr