解析CSV文件并在变量中存储值



我对Java编程相当陌生。我有这个要求从CSV文件(大约25列)中读取行,并使用JAVA将其加载到MySQL数据库。

  1. 数据必须每次插入一行,因为多表必须插入或更新每一行数据。

  2. 我需要一些机制来映射头(第一行在CSV与其相应的值),以便在将来如果我要在CSV文件中添加另一列,它不会影响我的程序。

  3. 它们可能是我的CSV文件中的字段,由","逗号组成,作为字段值的一部分。

  4. 使用的分隔符也是",",逗号。

关于我应该从哪里开始和要遵循的步骤的任何建议。在插入每一行之前,我需要从DB执行多个选择语句,因为很少的数据可能已经填充在相关的表中,我需要查询出项目ID来插入主记录表。

假设我有一个包含四个项目的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获取相应的ID(如果它们存在),如果它们不存在,那么首先插入这些记录以获得相应的ID,然后将数据插入Product_Table:

CSV的第一次加载将少于1000条记录的最大值,接下来的加载将只有最多50条记录的任何一天。所以时间不是问题。逻辑和

我正在考虑一些逻辑来存储CSV中的每个值在一些变量中,如

ProductID  = ProductID value from CSV 
ProductName = Name value from CSV

所以在将来,如果CSV中的值的顺序改变,即使这样,我也可以使用这些变量来插入和查询我的MYSQL表模式

使用univoc -parser自带的CSV解析器为您可靠地处理此问题:

CsvParserSettings settings = new CsvParserSettings(); // many options here, check the tutorial.
CsvParser parser = new CsvParser(settings);
List<String[]> allRows = parser.parseAll(new FileReader(new File("path/to/file.csv")));

在JDBC端,假设您使用的是PreparedStatement,只需遍历allRows并使用statement.setObject(index + 1, row[index])插入数据(假设索引从0开始)。对于大多数数据库- MySQL是其中之一-您不需要将字符串转换为数据库期望的类型。

声明:我是这个库的作者。它是开源和免费的(Apache V2.0许可)。

相关内容

  • 没有找到相关文章

最新更新