我已经看到很多关于使用批量插入在Android上优化SQLITE的帖子 目前花费90秒进行900次插入/更新。我在它们周围添加了开始/结束事务,但只看到了一些小的改进。 所以我想添加我相信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.Update
int wok = db.update(table, values, Key + " = ?", new String[] { Item });
dh.Add
int work = (int) db.insert(table, null, values);
ContentSystem是ContentValues的列表
答案 0 :(得分:1)
Try INSERT OR REPLACE
,而不仅仅是更新或更新失败,后跟插入。
答案 1 :(得分:0)
您确定DatabaseHandler类中的实例化SQLiteDatabase对象与_dh
相同吗?
您可能已经为_dh启动了一个事务,但这可能甚至不是实际执行任何工作的实例化对象。