Создайте Java ResultSet, используя файл CSV вместо оператора SQL

Я хочу использовать набор результатов для хранения моих пользовательских данных. Только одна морщина - данные находятся в формате CSV (с разделителями-запятыми), а не в базе данных.

CSV-файл содержит строку заголовка вверху, а затем строки данных. Я хотел бы динамически создавать набор результатов, но не использовать SQL-запрос. На входе будет файл CSV.

Я ожидаю (исходя из моего опыта работы с Java), что будут такие методы, как rs.newRow, rs.newColumn, rs.updateRow и так далее, поэтому я мог бы использовать структуру набора результатов без предварительного запроса к базе данных.

Есть ли такие методы на наборах результатов? Я читал документы и не нашел никакого способа. Было бы очень полезно просто создать набор результатов из CSV, а затем использовать его, как я делал SQL-запрос. Мне сложно использовать java bean, список массивов bean и т. д. - потому что я хочу читать в файлах CSV с разными структурами, что эквивалентно SELECT * FROM в SQL.

Я заранее не знаю, какие будут названия или номера столбцов. Поэтому другие вопросы SO, такие как «Добавить данные в Java ResultSet вручную», не отвечают моим потребностям. В этом случае у него уже есть набор результатов, созданный SQL, и он хочет добавить строки.

В моем случае я хочу создать набор результатов с нуля и добавить столбцы по мере считывания первой строки. Теперь, когда я думаю об этом, я мог бы создать запрос из первой строки, используя такой оператор, как SELECT COL1, COL2, COL3 ... FROM DUMMY. Затем используйте оператор INSERT ROW, чтобы прочитать и вставить остальные. (Позже :) Но при попытке это терпит неудачу, потому что нет реальной связанной таблицы.

Есть ли в этом длинном блоке текста вопрос?

Neville Kuyt 09.08.2018 18:41

Трудно понять, чего вы на самом деле хотите. Может быть, вы ищете CSV-файл JDBC-драйвер?

fvu 09.08.2018 18:41

Невилл Кайт - Я хочу использовать набор результатов для хранения моих пользовательских данных. Только одна морщина - данные находятся в формате CSV (с разделителями-запятыми), а не в базе данных. - и, видимо, нет простого пути. У тебя есть ответ? - - - Фву - да, это именно то, что я ищу.

Baruch Atta 10.08.2018 18:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
1 817
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Проект с открытым исходным кодом CsvJdbc должен делать именно это:

// Load the driver.
Class.forName("org.relique.jdbc.csv.CsvDriver");

// Create a connection using the directory containing the file(s)
Connection conn = DriverManager.getConnection("jdbc:relique:csv:/path/to/files");

// Create a Statement object to execute the query with.
Statement stmt = conn.createStatement();

// Query the table. The name of the table is the name of the file without ".csv"
ResultSet results = stmt.executeQuery("SELECT col1, col2 FROM myfile");

Еще одна идея в дополнение к идее @Mureinik, которая мне очень понравилась.

В качестве альтернативы вы можете использовать любую библиотеку CSV Reader (многие из них есть) и загрузить файл в таблицу в памяти, используя любую базу данных в памяти, такую ​​как H2, HyperSQL, дерби и т. д. Они предлагают вам полный / полный механизм SQL, в котором вы можете выполнять сложные / сложные запросы.

Это требует больше работы, но вы получаете большую гибкость для использования данных впоследствии.

После того, как вы попробуете решение в памяти, переключиться на постоянную базу данных будет очень просто (просто измените URL-адрес). Таким образом, вы можете загрузить CSV-файл в базу данных только один раз. При втором запуске база данных будет готова к использованию; нет необходимости повторно загружать CSV.

Влад: спасибо за ответ. Я всегда мог загрузить в базу данных SQL. Но мое приложение использует данные только один раз, а затем отбрасывает их. Overkill загрузить в БД. Настойчивость не требуется.

Baruch Atta 14.08.2018 20:32

Другие вопросы по теме