【发布时间】:2013-10-10 19:05:27
【问题描述】:
我看过很多关于在 android 上使用批量插入优化 SQLITE 的帖子 目前它需要 90 秒来完成 900 次插入/更新。我在它们周围添加了 Begin/End Transaction,但只看到了微小的改进。 所以我想添加我相信的SQLiteStatement
这是我目前的代码
static ArrayList<ContentSystem> csList = new ArrayList<ContentSystem>();
..填写csList..
_dh.BeginTransaction(Table);
for(int i = 0; i < csList.size(); ++i)
{
addItem(ma, csList.get(i), dh, Table, Key);
}
_dh.setTransactionSuccessful();
_dh.EndTransaction(Table);
public static void addItem(final MainActivity ma, ContentSystem cs,
final DatabaseHandler dh, String Table, String Key)
{
worked = dh.UpdateItem(cs.cv, Table, Key, cs.UUID);
if (worked == 0)
{
worked = dh.AddData(Table, cs.cv);
if (worked <= 0)
{
ErrorLogger.AddError("Error")
}
}
}
我的问题是,如果我的 csList 包含约 1000 个项目并且有些已经在我的列表中,有些则不在 所以我目前正在更新,如果更新返回 0 然后我会添加
我怎样才能让这样的东西在批量语句中起作用?
更多信息
dh.更新
int wok = db.update(table, values, Key + " = ?", new String[] { Item });
dh.添加
int work = (int) db.insert(table, null, values);
ContentSystem 是一个 ContentValues 列表
【问题讨论】:
-
参考这个帖子,太棒了-stackoverflow.com/questions/1711631/…
-
@bclymer 是的 - 这是我一直在使用的查询之一 - 我不明白如何在批量事务中进行多种类型的查询 - 我知道我需要这样做 - 这是简而言之,这表明了什么
-
我很惊讶自从问题结束后你们可以使用线程。无论如何,由于我的声誉高得不合理,我投票决定重新开放它。也许其他人也会这样做。
-
@DanBracuk 不确定你在说什么...... bclymer 提供的链接已受到保护 - 无论如何,我正在尝试就手头的问题寻求帮助......谢谢
-
我刚刚点击了链接,标题是“如何提高 SQLite 的性能?[关闭]”。关闭的原因是不清楚要问什么。没错,但我还是投票决定重新打开它。
标签: android mysql sql performance sqlite