私のアプリケーションが初めてインストールされたときに、データベースを作成してテーブルにデータを挿入するコードがあります。挿入速度を上げるために、「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();
}
}
}
}
}
ここでは、挿入パフォーマンスを向上させるために他の提案をいくつか試してみましたか?http://stackoverflow.com/questions/1711631/improve-insert-per-second-performance-of-sqlite –
@Morrison Changはい、そこから私はトランザクションとPrepared Statementを取ったが、速度はまだ遅いので、PRAGMA synchronous = OFFを使用したい。しかし、それをどこに追加するか分からない。 – gigs
関連:http://stackoverflow.com/questions/7450437/android-improve-sqlite-performance-optimise代替候補は、事前に構築されたデータベースを使用し、APKに追加してください:http://stackoverflow.com/questions/513084/how to-ship-an-android-application-a-database –