ほぼ20000個のタグを含む巨大なxmlを解析しています。解析するとすぐに、xmlからのすべてのエントリをsqliteデータベースに保存しています。
しかし、どうやらxmlは挿入操作なしでかなり速く解析されているようですが、各値を挿入しようとすると非常に長い時間がかかります(約10分)。
データベース挿入コード:
for (int i = 0; i < tracksList.size(); i++) {
dataSource.addTracks(tracksList.get(i));
}
public long addTracks(Tracks tracks) {
long insertId = 0;
ContentValues values = new ContentValues();
values.put(TRACKS_ID, tracks.getStrId());
values.put(TRACKS_ARTISTID, tracks.getStrArtistId());
values.put(TRACKS_ARTISTNAME, tracks.getStrArtistName());
values.put(TRACKS_ALBUMNAME, tracks.getStrAlbumName());
values.put(TRACKS_FILENAME, tracks.getStrFileName());
values.put(TRACKS_TRACKNAME, tracks.getStrTrackName());
insertId = database.insert(TRACKS_TABLE, null, values);
return insertId;
}
配列リストから各要素を取得し、はるかに高速に保存するための代替手段はありますか?
編集:それが機能するようになりました、thnxすべて..
database.beginTransaction();
try {
//standard SQL insert statement, that can be reused
SQLiteStatement insert =
database.compileStatement("insert into " + TRACKS_TABLE
+ "(" + TRACKS_ID + "," + TRACKS_ARTISTID
+ "," + TRACKS_ARTISTNAME
+ "," + TRACKS_ALBUMNAME
+ "," + TRACKS_FILENAME
+ "," + TRACKS_TRACKNAME + ")"
+" values " + "(?,?,?,?,?,?)");
for (Tracks value : tracksList){
//bind the 1-indexed ?'s to the values specified
System.out.println(value.getStrId());
insert.bindLong(1, value.getStrId());
insert.bindString(2, value.getStrArtistId());
insert.bindString(3, value.getStrArtistName());
insert.bindString(4, value.getStrAlbumName());
insert.bindString(5, value.getStrFileName());
insert.bindString(6, value.getStrTrackName());
insert.execute();
}
database.setTransactionSuccessful();
} finally {
database.endTransaction();
}