С помощью базы данных H2 я могу выполнить SQL-запрос к тексту CSV, считанному из Java Reader, например, StringReader? - PullRequest
2 голосов
/ 14 ноября 2011

Есть ли способ выполнить SQL-запросы для CSV-текста, хранящегося в памяти и считанного из Java Reader, например, StringReader.

org.h2.tools.Csv.read (Reader reader, String [] colNames) позволит мне получить набор результатов, содержащий все строки и столбцы.Однако на самом деле я хочу выполнить запрос к тексту CSV, считанному из Reader.

Фон - я получаю файл, содержащий несколько разделов CSV для каждого объекта, см. Может ли база данных H2 запросить файл CSVсодержащий несколько разделов разных групп записей? , и при разборе файла я сохраняю каждый из разделов CSV, которые мне нужны, в строках (строка для каждого).Это не должно перегружать память, поскольку я храню данные в памяти только в течение короткого времени, и каждый раздел CSV относительно мал).Мне нужно выполнить запросы к этим разделам CSV для создания документа в произвольном формате.

Я мог бы записать каждый раздел CSV в файл (как набор файлов) и использовать CSVREAD, но я не хочучтобы сделать это так, как мне нужно, чтобы мое приложение было максимально быстрым, а разделение и запись разделов на диск приводят к смерти жесткого диска.

Ответы [ 2 ]

1 голос
/ 15 ноября 2011

Вы можете написать определяемую пользователем функцию , которая возвращает набор результатов, и использовать ее для генерации необходимых строк.Внутри вашей пользовательской функции вы можете использовать инструмент Csv из H2 (фактически любой инструмент Csv).

0 голосов
/ 15 ноября 2011

Это невозможно напрямую, поскольку СУБД обычно может запрашивать только собственное оптимизированное хранилище данных. Вы должны импортировать текст с указанным org.h2.tools.Csv.read в таблицу и выполнить запросы к этой таблице. Таблица может быть временной, чтобы предотвратить любые записи на диск, при условии, что памяти достаточно.

...