Я довольно новичок в программировании на Java. У меня есть это требование, чтобы прочитать строку строк из файла CSV (приблизительно 25 столбцов) и загрузить его в базу данных MySQL с помощью JAVA.Анализ файлов CSV и сохранение значений в переменной
Данные должны вставляться по 1 строке за раз, так как несколько таблиц необходимо вставлять или обновлять с каждой строкой данных.
Мне нужен какой-то механизм для отображения заголовка (1-я строка в CSV с соответствующими значениями), так что в будущем, если я добавлю еще один столбец в файл CSV, это не повлияет на мою программу.
Их могут быть поля в моем CSV-файле, которые состоят из запятой «,» как части значения поля.
Используемый разделитель также является «,» запятой.
Любое предложение о том, где я должен начинать и какие шаги следует выполнять. Мне нужно выполнить оператор множественного выбора из БД перед вставкой каждой строки, так как немногие из данных могут быть заполнены в связанных таблицах, и мне нужно запросить идентификатор товара, чтобы вставить главную запись.
Допустим, если у меня есть CSV с четырьмя пунктами,
ProductID , Name , Store Name , Country
101 , Pencil, Evergreen , Finland
Поэтому мне нужно вставить эти значения в таблицу продукта с приведенной ниже схеме.
**Product_Table:**
+------------------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+----------------------+------+-----+---------+-------+
| Product_ID | varchar(16) | NO | PRI | NULL | |
| Name | varchar(64) | NO | MUL | NULL | |
| Store_ID | int(10) unsigned | NO | | NULL | |
| Country_ID | smallint(5) unsigned | NO | | NULL | |
**Store_Table**
+------------------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+----------------------+------+-----+---------+-------+
| Store_ID | varchar(16) | NO | PRI | NULL | AI |
| Name | varchar(64) | NO | MUL | NULL | |
**Country_Table**
+------------------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+------------------+----------------------+------+-----+---------+-------+
| Country_ID | varchar(16) | NO | PRI | NULL | AI |
| Country_Name | varchar(64) | NO | MUL | NULL | |
Итак, как вы можете видеть, мне нужно передать в Название магазина и Страна Название поле значения из CSV, чтобы получить соответствующее удостоверение личности (если они существуют), и если они этого не делают, то Insert эти записи первых, чтобы получить соответствующее удостоверение личности, прежде чем вставить данные в Product_Table:
Первая загрузка CSV будет меньше, чем 1000 записей максимум и следующая загрузка будет только максимум 50 записей в любой день. Так что время не проблема. Логика и
Я думал о какой-то логики для хранения каждого значения из CSV в какой-либо переменной, как
ProductID = ProductID value from CSV
ProductName = Name value from CSV
, так что в будущем, если порядок значений в изменениях CSV, даже тогда я могу просто использовать эти переменные вставлять и запрашивать мою схему таблиц MYSQL.
Возможно, вы можете использовать https://dev.mysql.com/doc/refman/5.1/en/load-data.html вместо java-синтаксического анализа? Вы можете использовать подзапрос для вычисления country_id. Использование нагрузки на изъятие Вы уменьшите количество операций с БД (выберите countri_ud и после store_id и только после вставки данных), и код будет работать быстрее. – ainlolcat
Это звучит неплохо, но я думаю, что сначала попробую обычным способом, так как я просто изучаю основные шаги, прежде чем я смогу реализовать более эффективный метод на более позднем этапе. Спасибо за ввод –
Вы должны использовать другой разделитель, если запятые являются частью допустимого значения – Romski