我将有关用户音轨的信息存储在数据库中(它位于内部存储器中)。我有这个函数用于在数据库适配器类中插入数据:
public void addTracks(ArrayList<Track> tracks){
for (Track track : tracks) {
addTrack(track);
}
}
public long addTrack(Track track) {
ContentValues initialValues = createContentValues(track.title, track.artist,
track.id, track.url, track.lyrics_id, track.owner_id, track.cover_small_url, track.cover_large_url);
return database.insert(TABLE_USER_TRACKS, null, initialValues);
}
工作正常。但是,当用户拥有数千个曲目时,需要很长时间(约10秒)。
有没有办法让插入更快?
答案 0 :(得分:2)
try
{
db.beginTransaction();
for (Track track : tracks)
{
addTrack(track);
}
db.setTransactionSuccessful();
}
catch (SQLException e) {}
finally
{
db.endTransaction();
}
详细了解数据库事务here
答案 1 :(得分:0)
您可以将插入内容包装到单个事务中,如http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#beginTransaction()中所示。 您可以尝试这样的方法,但要小心错误处理:
public void addTracks(ArrayList<Track> tracks){
database.beginTransaction();
try {
for (Track track : tracks) {
addTrack(track);
}
database.setTransactionSuccessful();
} finally {
database.endTransaction();
}
}