我正在使用SAX解析器解析網絡上的XML文件。 解析時我想將數據添加到數據庫中,因此我使用INSERT查詢來添加數據。但每個插入需要:10 - 15毫秒,我有近150個記錄,幾乎需要130秒來解析和插入。 我已經嘗試過在事務中插入查詢,但它仍然給我同一時間。我附上我的代碼。我不知道我是否正確解析它,或者我的插入事務是錯誤的?SAX解析器解析需要很長時間才能插入數據庫中
XMLHandler.java
public class XMLHandler extends DefaultHandler {
private static boolean inKey = false;
private static boolean inCode = false;
private static boolean inTitle = false;
private static boolean inType = false;
private static boolean inRoom = false;
private static boolean inDescription = false;
private static boolean inStart = false;
private List List = new List();
public void startElement(String uri, String name, String qName,
Attributes atts) {
if (name.trim().equals("key"))
inKey = true;
else if (name.trim().equals("code"))
inCode = true;
else if (name.trim().equals("title"))
inTitle = true;
else if (name.trim().equals("type"))
inType = true;
else if (name.trim().equals("room"))
inRoom = true;
else if (name.trim().equals("description"))
inDescription = true;
else if (name.trim().equals("start"))
inClassStart = true;
}
public void endElement(String uri, String name, String qName)
throws SAXException {
if (name.trim().equals("key"))
inKey = false;
else if (name.trim().equals("code"))
inCode = false;
else if (name.trim().equals("title"))
inTitle = false;
else if (name.trim().equals("type"))
inType = false;
else if (name.trim().equals("room"))
inRoom = false;
else if (name.trim().equals("description"))
inDescription = false;
else if (name.trim().equals("start"))
inClassStart = false;
}
public void characters(char ch[], int start, int length) {
String chars = (new String(ch).substring(start, start + length));
try {
if(inKey)
List.key = chars;
if(inCode)
List.code = chars;
if(inTitle)
List.title = chars;
if(inType)
List.type = chars;
if(inRoom)
List.room = chars;
if(inDescription)
List.description = chars;
if(inStart)
List.start = chars;
DB.insertFeed(List.key, List.code, List.title, List.type, List.room, List.description, List.start);
} catch (Exception e) {
Log.e("NewsDroid", e.toString());
}
}
DatabaseManager.java
public void insertFeed(String key, String code, String title, String type, String room, String desc,String start) {
db.beginTransaction();
try{
String sql = "INSERT OR REPLACE INTO " + TEST+ "(KEY,CODE,TITLE, TYPE ,ROOM , DESCRIPTION, START) VALUES" + "(?,?,?,?,?,?,?);";
Object [] bindArgs = new Object[]{key,code,title,type,room, desc,start};
db.execSQL(sql, bindArgs);
db.setTransactionSuccessful();
}
catch (SQLException e){}
finally{
db.endTransaction();
}
}
但是,然後在ArrayList解析時單獨添加字符串也需要時間嗎? – Change 2012-01-17 19:02:03
是的,但這種方法肯定會爲你節省一些時間,因爲它同時在db中插入多條記錄。此外,如果您可以使用JSON格式進行回覆,則可以使用GSON或JACKSON解析器加速解析(我更喜歡傑克遜)。 – akkilis 2012-01-17 19:09:05
是否有可能,如果你可以更多地解釋我如何添加ih.bind(idIndex,Integer.parseInt(source.getId()));這意味着什麼是getId()函數,它有什麼作用? – Change 2012-01-17 21:51:28