Android faster insert database

I am parsing a HUGE xml that contains almost 20,000 tags, I am saving all the xml records in my sqlite database as soon as I parse them.

But, apparently, xml parses very quickly without an insert operation, but when I try to paste all the values, it takes a very long time (about 10 minutes).

Database Insert Code:

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; } 

Is there an alternative to get every item from my arraylist and save them at a much faster rate.

EDIT: Got it working, thnx everything ..

  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 ? 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(); } 
+4
source share
1 answer

Use one transaction for all inserts, otherwise you get repository synchronization overhead for each individual insert:

 database.beginTransaction(); try { for (int i = 0; i < tracksList.size(); i++) dataSource.addTracks(tracksList.get(i)); database.setTransactionSuccessful(); } finally { database.endTransaction(); } 
+9
source

Source: https://habr.com/ru/post/1441002/


All Articles