我在向Android SQLite数据库中插入多个条目时遇到问题。我这样插入db.execQuery():
String insertString = "INSERT INTO coordinates
SELECT 0 AS _id, 5 AS associated_route_id, 38.88945 AS latidude, -77.034821 AS longitude
UNION SELECT 1, 5, 38.889671, -77.034912
UNION SELECT 2, 5, 38.890041, -77.035316"
database.execSQL(insertString);
我稍后会使用相同的数据库:
String[] columns = new String[] { "latitude", "longitude" };
Cursor cursor = db.query("coordinates", columns,
"associated_route_id=5", null, null, null,
null);
cursor.moveToFirst();
if (cursor.getCount() == 0)
// No rows in cursor
我使用db.insert(table,null,contentValues)使用它,但替换了插入以使事情更快。
问题是光标是空的,这使得它看起来像插入不起作用。为什么不起作用?
答案 0 :(得分:10)
回答我自己的问题。
我使用了不同的方法来插入条目。我使用Trinimon的建议来使用db.compileStatement,但增加插入时间最多的是添加:
db.startTransaction();
//insert lots of stuff...
database.setTransactionSuccessful();
database.endTransaction();
插入500个条目从45秒减少到300毫秒。
答案 1 :(得分:2)
插入记录的最快方法是使用带有绑定变量的预准备语句,因为语句不需要一直编译,例如:
String sql = "INSERT INTO coordinates (?, ?, ?, ?)";
SQLiteStatement statement = db.compileStatement(sql);
// loop through records or arrays and assign values
for (...) {
long id = ...
long associated_route_id = ...
double latidude = ...
double longitude = ...
statement.bindLong (1, id);
statement.bindLong (2, associated_route_id);
statement.bindDouble(3, latidude);
statement.bindDouble(4, longitude);
statement .execute();
}
希望这有帮助......干杯!