Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android更快的数据库插入_Android_Xml_Sqlite_Parsing - Fatal编程技术网

Android更快的数据库插入

Android更快的数据库插入,android,xml,sqlite,parsing,Android,Xml,Sqlite,Parsing,我正在解析一个包含近20000个标记的巨大xml,我正在将xml中的所有条目保存到我的sqlite数据库中 但显然,xml在没有插入操作的情况下很快就被解析了,但当我尝试插入每个值时,需要很长时间(大约10分钟) 数据库插入代码: for (int i = 0; i < tracksList.size(); i++) { dataSource.addTracks(tracksList.get(i)); } public long

我正在解析一个包含近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;
}

对所有插入使用一个事务,否则您将获得每个插入的存储同步开销:

database.beginTransaction();
try {
    for (int i = 0; i < tracksList.size(); i++)
        dataSource.addTracks(tracksList.get(i));                        

    database.setTransactionSuccessful();
} finally {
    database.endTransaction();
}
database.beginTransaction();
试一试{
对于(int i=0;i
如果您不想使用搜索过滤器执行读取操作,可能是您可以直接将xml转储到数据库中。您可能应该检查此项。简而言之,使用事务——如果你想插入很多东西,这是必须的。批量事务或输入流
database.beginTransaction();
try {
    for (int i = 0; i < tracksList.size(); i++)
        dataSource.addTracks(tracksList.get(i));                        

    database.setTransactionSuccessful();
} finally {
    database.endTransaction();
}