gpt4 book ai didi

android - 如何在 SQLite 中更新 2000 行时最小化时间要求

转载 作者:搜寻专家 更新时间:2023-10-30 23:45:35 24 4
gpt4 key购买 nike

我有超过 20,000 行的 SQLite。

当我添加新数据(2000 行)时需要 2 秒。

但是当我尝试更新相同的 2000 行时,它需要将近 10 分钟。

我正在使用以下代码进行更新

 public int update_ItemPriceDetails(Struct_ItemPrice_Details mStruct_ItemPrice_Details, String ItemId) 
{
SQLiteDatabase db = this.getWritableDatabase();

ContentValues values = new ContentValues();
//values.put(KEY_NAME, contact.getName());
values.put(Key_ITEM_Id, mStruct_ItemPrice_Details.get_Item_Id()); // Struct_Contact Name
values.put(Key_PRICE_Id, mStruct_ItemPrice_Details.get_Price_Id()); // Struct_Contact Name
.
.
.



// updating row
int update=db.update(TABLE, values,
Key_PRICE_Id + "=?",
new String[] {mStruct_ItemPrice_Details.get_Price_Id()});
// db.close();
return update;

}




Database_ItemPrice_Details db = getInstance(context);
SQLiteDatabase DB = db.getWritableDatabase();

try {
DB.beginTransaction();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}


for(int i=0i<2000;i++)
{
update_ItemPriceDetails(List.get(i), "")
}
try {
Database_ItemPrice_Details_Kolkata db = getInstance(context);
SQLiteDatabase DB = db.getWritableDatabase();

DB.setTransactionSuccessful();
DB.endTransaction();

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

最佳答案

第 1 步:不要在循环内调用 getWritableDatabase()。在整个代码 fragment 中应该只有一次调用 getWritableDatabase()

第 2 步:正确使用事务:

db.beginTransaction();

try {
// your SQL
db.markTransactionSuccessful();
}
catch (Exception e) {
// do whatever logging you want to do, etc.
}
finally {
db.endTransaction();
}

可能您所拥有的不会影响性能,但由于适当的事务对性能非常重要,因此值得研究。特别是在您描述的持续时间内,交易似乎无法正常进行。

第 3 步:正如 TobyLL 所建议的,确保您的列上有一个由 Java 中的 Key_PRICE_Id 指示的索引。

第 4 步:避免在循环内创建 ContentValues,以避免产生过多的垃圾。

第 5 步:使用 Traceview 确定您将剩余时间花在了哪些地方。

关于android - 如何在 SQLite 中更新 2000 行时最小化时间要求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29082501/

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