2016-11-05 19 views
0

1対多の関係にあるデータを保存しようとしていました。国と同じようにここでAndroidのsqliteと1対多の関係を挿入

下の画像のように多くの州があり、DBテーブルが Hint as to what the sqlite db table looks like

public class Country { 

    private int countryId; 

    private String countryName; 

    private List<State> states; 
} 

上に蓄積され、ここでは、国と州省のコードであるモデルです。

public void saveToDb(List<Country> countries) { 

    for(Country country: countries){ 
     saveCountry(country); 

     List<State> states = country.getStates(); 

     for(State state :states) 
      saveState(state); 
    } 
} 

ネストされたループがいかに高価知っネストされたループを使用せずにそのデータを保存する効率的な方法があった場合、私は思っていました。 すべてのヘルプは非常にあなたは、バッチ挿入を行うことができます

答えて

1

をいただければ幸いです。

db.beginTransaction(); 
for (Country country: countries) { 
    saveCountry(country); 
    List<State> states = country.getStates(); 

    for(State state :states) 
     saveState(state); 
} 
db.setTransactionSuccessful(); 
db.endTransaction(); 

は、ループの外にあなたのdb.beginTransaction();db.setTransactionSuccessful();db.endTransaction();を置きます。

+0

ちょうど1つのループを使用して、1つのループで国と州を保存するというアイデアがありました。 –

+0

begintransaction、settransaction、およびend transactionをループ外に置くとパフォーマンスが向上します。私の意見では、ループはデバイス内で高速に実行できるため、各ループで発生するトランザクションがパフォーマンスが遅い理由でした。このstackoverflowの回答を参照することがありますhttp://stackoverflow.com/questions/3501516/android-sqlite-database-slow-insertion – MinFu