2016-07-12 8 views
0

私のアプリケーションが初めてインストールされたときに、データベースを作成してテーブルにデータを挿入するコードがあります。挿入速度を上げるために、「PRAGMA synchronous = OFF」を追加します。コードでは、「PRAGMA synchronous = OFF」を追加する必要がありますか?Android - 追加する場所PRAGMA synchronous = OFF

public class DataBaseHelper extends SQLiteOpenHelper { 
    private static final String DATABASE_NAME = "scheduleDB"; 
    private static final int DB_VERSION = 1; 

    Context context; 

    public DataBaseHelper(Context context) { 
     super(context, DATABASE_NAME, null, DB_VERSION); 
     this.context = context; 
    } 

    @Override 
    public void onCreate(SQLiteDatabase db) { 
     try {     
      db.execSQL("CREATE TABLE time (id INTEGER PRIMARY KEY AUTOINCREMENT, arrival VARCHAR(10), departure VARCHAR(10));");  
      insertTime(db,"city"); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
     try { 
      onCreate(db); 
     } catch (SQLException e) { 
      e.printStackTrace(); 
     } 
    } 


    public void insertTime(SQLiteDatabase database, String table) { 
     BufferedReader br = null; 
     String line; 

     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
      database.beginTransactionNonExclusive(); 
     } else { 
      database.beginTransaction(); 
     } 

     try {     
      br = new BufferedReader(new InputStreamReader(context.getAssets().open("time.txt"))); 
      while ((line = br.readLine()) != null) {      
       String query = "INSERT INTO "+table+" (arrival, departure) VALUES (?,?)"; 
       SQLiteStatement statement = database.compileStatement(query); 

       String[] time = line.split(","); 

       for(int i = 1, n = time.length; i < n; i+=2) { 
        statement.clearBindings(); 
        statement.bindString(1,time[i-1]);//arrival 
        statement.bindString(2,time[i]);//departure 
        statement.execute(); 
       } 
      } 
      br.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } finally { 
      database.setTransactionSuccessful(); 
      database.endTransaction(); 
      if (br != null) { 
       try { 
        br.close(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 
      } 
     } 
    } 
} 
+0

ここでは、挿入パフォーマンスを向上させるために他の提案をいくつか試してみましたか?http://stackoverflow.com/questions/1711631/improve-insert-per-second-performance-of-sqlite –

+0

@Morrison Changはい、そこから私はトランザクションとPrepared Statementを取ったが、速度はまだ遅いので、PRAGMA synchronous = OFFを使用したい。しかし、それをどこに追加するか分からない。 – gigs

+0

関連:http://stackoverflow.com/questions/7450437/android-improve-sqlite-performance-optimise代替候補は、事前に構築されたデータベースを使用し、APKに追加してください:http://stackoverflow.com/questions/513084/how to-ship-an-android-application-a-database –

答えて

0

データベース接続を設定する正しい場所は、onConfigure() callbackです。

ただし、データベースの作成をスピードアップする最適な方法は、ちょうどcopy a pre-built file from the assets folderです。

+0

私はonConfigure()を作成し、db.execSQL( "PRAGMA synchronous = OFF")を追加しました。それはスピードを上げませんでした。 – gigs

関連する問題