0
上記のコードを使用してDBに3000レコードを挿入しています。サーバからparamのリストを取得していますが、問題はエミュレータで2.5分かかります実際のデバイスでは2倍になります。SQLiteに1000レコードの挿入を最適化するには
挿入を最適化する方法を教えてください。
はここ
public boolean insertRowDynamically(TableData tableData, String tableName) {
keysStringBuilder.delete(0,keysStringBuilder.length());
valuesStringbuilder.delete(0,valuesStringbuilder.length());
SQLiteStatement sqLiteStatement = null;
response = true;
flag = true;
first=true;
LinkedHashMap<String,Object> values= new LinkedHashMap<>();
List<Map<String, Object>> rowValue = tableData.getListofMapRecords();
try {
openDataBase();
myDataBase = this.getWritableDatabase();
myDataBase.beginTransactionNonExclusive();
int i=0;
for (Map<String, Object> map : rowValue) {
values.clear();
values.putAll(map);
Set keys = values.keySet();
Iterator<String> it = keys.iterator();
i=1;
while (it.hasNext()) {
String key = it.next();
if (flag) {
keysStringBuilder.append(key);
valuesStringbuilder.append("?");
flag = false;
} else {
keysStringBuilder.append(", ").append(key);
valuesStringbuilder.append(", ").append("?");
}
if (!it.hasNext()) {
String query = "INSERT INTO " + tableName + "(" + keysStringBuilder + ") VALUES(" + valuesStringbuilder + ")";
sqLiteStatement = myDataBase.compileStatement(query);
}
}
}
first = false;
i=1;
for (String key :values.keySet())
{
sqLiteStatement.bindString(i,values.get(key).toString());
i++;
}
sqLiteStatement.executeInsert();
sqLiteStatement.clearBindings();
} catch (SQLException e) {
Log.d("Syncing Data", "From insertRowDynamically " + e);
} finally {
close();
}
return response;
}
あなたはhttp://developer.android.com/reference/android/database/DatabaseUtils.InsertHelper.htmlで見たことがありますか? – Toorop
こんにちは、私は何を提案しようとしましたか? –
@GoltsevEugene与えられたコードにいくつかの変更を加え、私のために働き始めました。 –