私は私を夢中にさせている問題を抱えています。CSV ファイル (openCSV を使用) からデータベースにデータをインポートするのですが、以前はサーバーからのダウンロード時間を含めて 3 ~ 5 秒程度で完了していました。CSV ファイルには 3035 のレコードがあります。解析をCSVから分離してテーブルに挿入しようとしましたが、役に立ちませんでした。
奇妙に聞こえるかもしれませんが、アプリケーション内で突然何かが変更され、このプロセスにはるかに長い時間がかかりました。
絞り込んだ後、テーブルへの挿入がSQLiteでは非常に遅いことがわかりました。過去数時間、古いコードに戻って何かが変更されたかどうかを確認しましたが、うまくいきませんでした。
同様の質問に出くわしましたが、その答えは私が行った InsertHelper の使用を示唆しています。インポート時間にまったく違いはありませんでした。現在、データの挿入には 60 秒かかりますが、以前は数秒しかかかりませんでした。
public void importFromCSV()
{
SQLiteDatabase db = this.getReadableDatabase();
db.execSQL("DELETE FROM EXAMS");
File SDCardRoot = Environment.getExternalStorageDirectory();
File file = new File(SDCardRoot.getAbsolutePath() + "/Finals/Data/timetable.csv");
CSVReader reader;
int i = 0;
try {
reader = new CSVReader(new FileReader(file));
String [] nextLine;
while ((nextLine = reader.readNext()) != null) {
this.addExam(new Exam(nextLine[0],
nextLine[1],
nextLine[2],
nextLine[3],
nextLine[4],
nextLine[5],
nextLine[6],
nextLine[7],
nextLine[8],
nextLine[9]));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public void addExam(Exam exam) {
SQLiteDatabase db = this.getReadableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_SESSION, exam.getSession());
values.put(KEY_AWARDING_BODY, exam.getAwardingBody());
values.put(KEY_QUALIFICATION, exam.getQualification());
values.put(KEY_TITLE, exam.getTitle());
values.put(KEY_EXAM_CODE, exam.getExamCode());
values.put(KEY_DURATION, exam.getDuration());
values.put(KEY_DATE, exam.getDate());
values.put(KEY_START_TIME, exam.getStartTime());
values.put(KEY_EXAM_NOTE, exam.getExamNote());
values.put(KEY_MY_NOTES, exam.getMyNotes());
db.insert(TABLE_NAME, null, values);
}