Android читает большой файл - PullRequest
2 голосов
/ 06 декабря 2010

У меня есть файл CSV в папке assets , содержащий более 10000 строк данных. Я хочу вставить эти данные в базу данных SQLite при ее создании. Я не могу включить базу данных, потому что это очень общее приложение, и модель требует CSV-файл. Я не хочу читать все 10000 строк данных и вставлять их из памяти за один отрезок. Как мне эффективно и эффективно выполнить задачу?

Ответы [ 3 ]

6 голосов
/ 06 декабря 2010

Просто вставьте сразу , как только вы прочитаете строку.Поэтому не храните строки в каком-либо массиве в памяти.

Например,

while ((line = reader.readLine()) != null) {
    insert(line);
}

Возможно, вы захотите сделать это за одну транзакцию, чтобы вы могли выполнить откат в случае неудачи на половине,На стороне JDBC вы можете рассмотреть PreparedStatement#addBatch() / #executeBatch() для выполнения вставок в пакетах.Пример можно найти в этом ответе .

Обновление : в качестве совершенно другой, но более эффективной альтернативы вы также можете оставить Java вне истории и использовать Средство импорта CSV, предоставляемое SQLite .

3 голосов
/ 06 декабря 2010

самое простое и эффективное в этом случае - это читать по 20-30-50 (или, может быть, 100 ?!) строк из файла и вставлять их в базу данных, однако вам также нужно выполнить несколько тестов, чтобы увидеть какое количество строк вы можете прочитать за 1 раз, а затем сделать это: -)

1 голос
/ 06 декабря 2010

ИМПОРТ имя файла имя таблицы

(из http://old.nabble.com/How-can-I-load-big-file-into-a-sqlite-database--td19202500.html - как LOAD DATA в MySQL).

Другое: отключить автоматическую фиксацию, автоматическую очистку; прочитать 20 строк, зафиксировать, очистить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...