大佬教程收集整理的这篇文章主要介绍了Android SQLite大行数,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
需要在sqlite数据库中本地存储大约20,000行信息.只有两列包含短文本字符串,因此实际的数据量很小,但我很难在设备上花3-5分钟插入行.我试过直接循环遍历数据集并调用一个简单的WritableDatabase.Insert,但这需要很长时间.所以我做了一些研究并被带到了the InsertHelper class,其中作者网站以大约900行/秒的速度处理行(这应该让我在20-30秒).我仍然无法在3-5分钟内处理数据.我错过了什么?性能因设备而异吗?使用ZTE Optik Android 3.2.1.
public class sqliteHelper : sqliteOpenHelper
{
private const String DATABASE_NAME = "NAME";
private const int DATABASE_VERSION = 1;
private readonly Context _context;
public sqliteHelper(Context context)
: base(context, DATABASE_NAME, null, DATABASE_VERSION)
{
_context = context;
}
public override void OnCreate(sqliteDatabase db)
{
try
{
db.Execsql("create table Inventory (Itemnumber Text PriMary Key Not Null, ItemDescription Text);");
}
catch (sqliteException eX)
{
Toast.MakeText(_context, ex.message, ToastLength.Long).Show();
}
}
public override void OnUpgrade(sqliteDatabase db, int oldVersion, int newVersion)
{
}
}
class InventoryRepository : AsyncTask
{
private sqliteHelper Helper { get; set; }
private Context Context { get; set; }
public InventoryRepository(sqliteHelper Helper, Context context)
{
Helper = Helper;
Context = context;
}
protected override Java.Lang.object DoInBACkground(params Java.Lang.object[] @params)
{
WS ws = new WS();
Datatable parts = ws.GeTinventory(); //Web service getTing inventory items from Server
Helper.WritableDatabase.delete("Inventory", null, null);
DatabaseUtils.InsertHelper ih = new DatabaseUtils.InsertHelper(Helper.WritableDatabase, "Inventory");
Helper.WritableDatabase.SetLockingEnabled(false);
int partcolumn = ih.GetcolumnIndex("Itemnumber");
int partDesccolumn = ih.GetcolumnIndex("ItemDescription");
Helper.WritableDatabase.begintransaction();
try
{
foreach (Da@R_951_2301@w part in parts.Rows)
{
try
{
ih.PrepareForinsert();
ih.bind(partcolumn, part[0].ToString().replace("'", "''"));
ih.bind(partDesccolumn, part[1].ToString().replace("'", "''"));
ih.Execute();
}
catch (sqliteException eX)
{
if (ex.message.Contains("consTraint"))
conTinue;
throw;
}
catch (NullReferenceException E)
{
conTinue;
}
}
Helper.WritableDatabase.Settransactionsuccessful();
}
finally
{
Helper.WritableDatabase.Endtransaction();
Helper.WritableDatabase.SetLockingEnabled(true);
ih.Close();
}
return "Done";
}
protected override void OnPostExecute(Java.Lang.object result)
{
PreferenceManager.GetDefaultSharedPreferences(Context).Edit().PutString("LasTinventoryupdate", datetiR_801_11845@e.Today.ToShortDateString()).Commit();
Intent intent = new Intent(Context, typeof(Login));
intent.AddFlags(ActivityFlags.NewTask);
Context.StartActivity(intent);
}
}
解决方法:
db.begintransaction();
try {
// your insertion loop goes here
db.settransactionsuccessful();
} finally {
db.endtransaction();
}
以上是大佬教程为你收集整理的Android SQLite大行数全部内容,希望文章能够帮你解决Android SQLite大行数所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。