SQLite插入包装在一个事务中:没有速度改进
我多次阅读,为了改进SQLite插入操作,它们必须被封装到一个事务中。 这就是我在我的例子中所做的:我有3个“String”,“long”和“int”的列表。 我打开数据库并使用以下代码编译语句:
mDb = mDataDB.getWritableDatabase();
String INSERT_QUERY = "INSERT INTO "+ mDataDB.TABLE_SENSORS_DATA + " (" +
mDataDB.COLUMN_SENSOR_ID +", " + mDataDB.COLUMN_TIME_STAMP + ", " +
mDataDB.COLUMN_PRESSURE + ")" +" VALUES(?,?,?);";
statement = mDb.compileStatement(INSERT_QUERY);
然后我开始交易:
mDb.beginTransaction();
我用一个循环来写入从列表中添加数据:
Iterator timeCursor = timeStamps.iterator();
Iterator dataCursor = data.iterator();
for(int i =0; i < dataCount; i++){
CurrentSensor.dataDAO.addData(sensor_id, (long)timeCursor.next(), (int) dataCursor.next());
Log.i("data iteration " + i,"data added to the db");
}
addData的代码是:
try {
statement.clearBindings();
statement.bindString(1, sensor_id);
statement.bindLong(2, time_stamp);
statement.bindLong(3, (long) pressure);// I can't bind integer ?!
statement.execute();
}catch(Exception e) {
e.printStackTrace();
}
最后我终止了交易。 不过,插入的时间非常长(每行大约10ms,而且我有成千上万...)。 事情是我以前使用SQlite的基本“插入”功能,并且持续时间相同。 会有人有建议吗?
链接地址: http://www.djcxy.com/p/19823.html上一篇: SQLite inserts wrapped in one transaction: no speed improvement