Я хочу использовать набор результатов для хранения моих пользовательских данных. Только одна морщина - данные находятся в формате 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, чтобы прочитать и вставить остальные. (Позже :) Но при попытке это терпит неудачу, потому что нет реальной связанной таблицы.
Трудно понять, чего вы на самом деле хотите. Может быть, вы ищете CSV-файл JDBC-драйвер?
Невилл Кайт - Я хочу использовать набор результатов для хранения моих пользовательских данных. Только одна морщина - данные находятся в формате CSV (с разделителями-запятыми), а не в базе данных. - и, видимо, нет простого пути. У тебя есть ответ? - - - Фву - да, это именно то, что я ищу.




Проект с открытым исходным кодом 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 загрузить в БД. Настойчивость не требуется.
Есть ли в этом длинном блоке текста вопрос?