gpt4 book ai didi

安卓 SQLite : How to generate big table for testing purpose?

转载 作者:行者123 更新时间:2023-11-30 03:34:48 25 4
gpt4 key购买 nike

我正在测试设备的功能 -- 向客户展示设备中可以存储的数据大小、检索数据的速度、搜索速度等。

我正在使用我的内容提供程序访问包含几列的 product 数据库表。我已经将代码移至内容提供者,以避免插入测试记录时的额外通信。下面的代码是通过 Activity 的菜单调用的,用测试内容填充表格

Uri uri = Uri.parse(DemoContentProvider.PRODUCTS_CONTENT_URI + "/insertdemo");
getContentResolver().insert(uri, null);

URI 在内容提供者的 .insert 方法中被识别,并调用以下私有(private)方法(同一内容提供者的)来填充表格(注意 10 万个项目):

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 秒。

最佳答案

在写入 sqlite 数据库时需要使用事务,否则它将为每次插入保留数据,即将其保存到 sd,这将“永远”。

例如,让 insertProduct 获取产品列表并将它们保存在一个事务中:

private void insertProducts(List<Product> products) {
try {
db.beginTransaction();
for(Product product : products) {
insertProduct(...);
}
db.setTransactionSuccessful();
} finally {
db.endTransaction();
}
}

这是在现有代码中实现它的方式:

private void insertDemoProducts() {
SQLiteDatabase sqlDB = database.getWritableDatabase();
try {
sqlDB.beginTransaction();
for (int i = 1; i <= 100000; ++i) {
String id = Integer.toString(i);
insertProduct(id, "Test product " + id, "100", "75.50", "70.27");
}
sqlDB.setTransactionSuccessful();
} finally {
sqlDB.endTransaction();
}
}

关于安卓 SQLite : How to generate big table for testing purpose?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16775061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com