トランザクションで sqlite db に追加するのに問題があります。追加する行が約 1700 行ありますが、この方法で行うには時間がかかります。
public SnoTelSiteData createSnoTelSiteData(String markerID,
String sitename, String sitedesc, String lat, String lon) {
ContentValues values = new ContentValues();
values.put(MySQLiteHelper.COLUMN_SITEMARKERID, markerID);
values.put(MySQLiteHelper.COLUMN_SITENAME, sitename);
values.put(MySQLiteHelper.COLUMN_SITEDES, sitedesc);
values.put(MySQLiteHelper.COLUMN_SITELAT, lat);
values.put(MySQLiteHelper.COLUMN_SITELON, lon);
long insertId = database.insert(MySQLiteHelper.TABLE_SITES, null,
values);
Cursor cursor = database.query(MySQLiteHelper.TABLE_SITES, allColumns,
MySQLiteHelper.COLUMN_ID + " = " + insertId, null, null, null,
null);
cursor.moveToFirst();
SnoTelSiteData newSite = cursorToSnoTelSiteData(cursor);
cursor.close();
return newSite;
}
だから私はこのメソッドを次のようなトランザクションに作り直そうとしています:
public SnoTelSiteData bulkCreateSnoTelSiteData(String markerID,
String sitename, String sitedesc, String lat, String lon) {
String sql = "INSERT INTO " + MySQLiteHelper.TABLE_SITES
+ " VALUES (?,?,?,?,?,?);";
SQLiteStatement statement = database.compileStatement(sql);
database.beginTransaction();
statement.clearBindings();
statement.bindString(1, markerID);
statement.bindString(2, sitename);
statement.bindString(3, sitedesc);
statement.bindString(4, lat);
statement.bindString(5, lon);
statement.execute();
Log.w("EXECUTE", "Done");
database.setTransactionSuccessful();
database.endTransaction();
return null;
}
主キーである COLUMN_ID を追加していないためにエラーが発生するため、これは機能しません。このトランザクションを機能させる方法について何か提案はありますか?
編集:::
SparseArray から情報を取得する for ループを次に示します。
for (int i = 0; i < vsize; i++) {
MapMarkers marks = new MapMarkers();
String title = visibleMarkers.valueAt(i).getTitle();
String desc = visibleMarkers.valueAt(i).getDesc();
Float latitude = visibleMarkers.valueAt(i).getLat();
Float longitude = visibleMarkers.valueAt(i).getLon();
String lat = latitude.toString();
String lon = longitude.toString();
m = map.addMarker(new MarkerOptions()
.position(new LatLng(latitude, longitude))
.title(title).icon(icon));
datasource.bulkCreateSnoTelSiteData(m.getId(), title, desc,
lat, lon);
marks.setTitle(title);
marks.setDesc(desc);
// markerInfo.put(m, marks);
m.setData(marks);
}
その for ループ内でこのトランザクションを実行する必要がありますか? 他に方法はありません。