我无法通过事务添加到我的 sqlite 数据库。我将添加大约 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 而出现错误。有关如何使此交易有效的任何建议?
编辑:::
这是我的 for 循环,它从 SparseArray 中获取信息
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循环中做这个交易对吗?我看没有别的办法。