繁体   English   中英

如何将具有关系的Java对象从.csv文件导入MySQL数据库?

[英]Howto IMPORT Java objects with relationship from .csv file into MySQL database?

假设我们有2个实体:

  1. 人员实体-具有2个属性person_id (手动输入)和firstname
  2. 地址实体-具有2个属性address_id (自动递增)和街道名称

每个人都有一个地址(OneToOne关系)。 因此,地址实体将具有指向其关联个人的外键(person_id)。 您会如何建议呢?

到目前为止,我只找到了一种无需关系管理即可将单个实体导入mysql的方法:

LOAD DATA INFILE 'c:/tmp/file.csv' 
INTO TABLE person 
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

好的,很不幸,这将是一个艰难的答案,但是很可能这是不修改表以插入的唯一方法(强烈建议不要这样做)。

  1. 创建一个临时表
    CREATE TEMPORARY TABLE `import` (
        `person_name` varchar(300) CHARACTER SET latin1 NOT NULL,
        `person_age` varchar(300) CHARACTER SET latin1 NOT NULL,
        `address1` varchar(300) CHARACTER SET latin1 NOT NULL,
        `city` varchar(300) CHARACTER SET latin1 NOT NULL
    ) ENGINE=MEMORY DEFAULT CHARSET=utf8;
  1. 做批量加载(如您在问题中所显示的)

  2. 从导入表中进行选择,并遍历每一行

  3. 插入地址表,获取last_insert_id,然后使用最后一个插入ID插入用户表

  4. 使用以下命令删除临时表: DROP TEMPORARY TABLE `import`;

如果您考虑删除自动递增的ID,而是改为使用UUID() ,则可以使用3个查询来执行此操作。

  1. 创建一个临时表
    CREATE TEMPORARY TABLE `import` (
        `uuid` char(36) CHARACTER SET latin1 NOT NULL,
        `person_name` varchar(300) CHARACTER SET latin1 NOT NULL,
        `person_age` varchar(300) CHARACTER SET latin1 NOT NULL,
        `address1` varchar(300) CHARACTER SET latin1 NOT NULL,
        `city` varchar(300) CHARACTER SET latin1 NOT NULL
    ) ENGINE=MEMORY DEFAULT CHARSET=utf8;
  1. 做批量装载:
    LOAD DATA INFILE 'c:/tmp/file.csv' 
    INTO TABLE person 
    (@dummy, person_name, person_age, address1, city)
    SET uuid = UUID()
    FIELDS TERMINATED BY ',' 
    ENCLOSED BY '"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS;
  1. 做你的插入:
    INSERT INTO address (id, address1, city)
    SELECT uuid, address1, city
    FROM `import`;

    INSERT INTO person (address_id, person_name, person_age)
    SELECT uuid, person_name, person_age
    FROM `import`;
  1. 使用以下命令删除临时表:DROP TEMPORARY TABLE import ;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM