2011-08-17 87 views
1

我正在製作一個Android應用程序,它從XML文件獲取其信息。 由於查詢的強大功能,我正在填充數據庫中的信息,以便在程序運行時更輕鬆地訪問。在交易中使用多種方法

然而,它引起了我的注意,使用事務大大提高了速度,所以很自然地,我想要使用它。

我的問題是以下tho; 在抽象思想中,在解析主體一個的所有信息之後,信息被髮送到正確的實體(類),並且在該實體內部有一種將其添加到數據庫中的方法。之後,它返回到繼續閱讀下一個主題的解析器,該主題又將發送到右側(可能不同)的類。

這是用switch語句實現的,每個case指向一個不同的類構造函數。

如果我想使用事務的速度,我需要在解析之前就開始一個事務,通過解析和查詢構建(據我所知,所有在事務中構建的查詢,最後全部作爲一堆執行),然後在解析完整個文件後結束事務。

爲了使這一點更清晰,或更快的閱讀;代碼的想法是;

Class parser(){ 
    database.beginTransaction(); 
    try{ 
     // start parsing in a whole different class, which also points to SQL queries (in different classes again) in the entitys with a switch 
     }catch(Exception e){ 
    database.endTransaction(); 
     } 
     database.endTransaction(); 
} 

我希望我明確提出了我的問題。

親切的問候,

回答

1

是的,你有一般的想法。但是,當您完成分析時,您需要小心地標記事務成功,並且確保事務始終關閉,即使發生異常也是如此。從the docs

例子:

db.beginTransaction(); 
try { 
    // do all the parsing in here 
    ... 
    db.setTransactionSuccessful(); 
} finally { 
    db.endTransaction(); 
} 
+0

嗨格雷厄姆Borland公司, 感謝您的快速回復。 我的問題的核心是如果開始一個沒有問題,讓我們說'一般事務'在某處,並且在事務之間有很多代碼。大多數發現的例子只是簡單地啓動一個事務,然後立即執行一個查詢或者通過某個事件的最大循環,然後執行查詢。 –

+0

每個示例使用誇張。問題是,每個例子只是創建一個只創建和填充數據庫的程序。 我*可以*在主方法中啓動一個事務,在該事務保持打開狀態時運行整個程序的剩餘部分,然後當所有事情都完成時,成功並結束事務,最後執行程序中構建的所有查詢一旦。 我明白,這當然是誇大,不想要的。 –

+0

在長時間運行的XML解析操作期間,事務處於打開狀態沒有任何問題。它提供了很多好處,包括速度,正如你自己注意到的那樣。 –