Android SQLite:优化插入持续时间

时间:2013-11-27 16:14:11

标签: android database sqlite optimization insert

我将有关用户音轨的信息存储在数据库中(它位于内部存储器中)。我有这个函数用于在数据库适配器类中插入数据:

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秒)。

有没有办法让插入更快?

2 个答案:

答案 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();
  }
}