当前位置: 首页 > 知识库问答 >
问题:

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

拓拔骁
2023-03-14

假设我们有 2 个实体:

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

每个Person都有一个地址(OneToOne关系)。因此地址实体将有一个外键(person_id)指向其关联的Person。您有什么建议?

到目前为止,我只找到了一种不用关系管理就能把单个实体导入mysql的方法:

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

共有1个答案

壤驷穆冉
2023-03-14

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

    < li >创建临时表
    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;

执行批量加载(如您在问题中所示)

从导入表中进行选择,然后遍历每一行

插入到地址表中,获取last_Insert_id,然后使用最后一个Insert id插入到用户表中

用以下命令删除临时表:< code >删除临时表“import ”;

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

    < li >创建临时表
    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;
    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;
    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`;
 类似资料:
  • 问题内容: 我有以下结构的csv文件: 使用以下MySQL函数如何导入MySQL表的第一和第三列: 我为我的英语道歉! 提前致谢 ! 问题答案: 您可以指定列,并将不需要的列标记为“ @dummy”。 替换,并且只要你喜欢。要设置不在数据文件中的其他列,您可以这样做: 作为进一步的参考,我建议您看一下MySQL参考。

  • 问题内容: 我有几个要导入到表中的CSV文件。它们都包含不同数量的列,因此每次导入期间都会缺少一些数据。我需要一个可以让我将哪个CSV列映射到哪个MySQL列的工具。看起来MySQL工作台无法做到这一点。我还能使用什么? 问题答案: MySQL具有LOAD DATA INFILE语法: 请参阅有关自定义数据处理的文档。

  • 想要知道更多东西吗?当你需要从表中查找某些值时,可以使用冗长的 case 语句或 selectors 实现,但更整洁的方式是使用 extlookup 函数实现。 在 puppetmaster 上可以使用 extlookup 函数查询外部的 CSV 文件,并返回匹配的数据片段。 将所有数据组织到一个单一的文件并将它从 Puppet 配置清单中分离出来, 可以使维护工作变得更简单,也便于与其他人分享:

  • 问题内容: 谁能解释一下如何将Microsoft Excel文件导入到MySQL数据库中? 例如,我的Excel表如下所示: 问题答案: 将其导出为某种文本格式。最简单的可能是制表符分隔的版本,但是CSV也可以使用。 使用加载数据功能。见http://dev.mysql.com/doc/refman/5.1/en/load-data.html 查看页面的一半,因为它将为制表符分隔的数据提供一个很好

  • 本文向大家介绍php将csv文件导入到mysql数据库的方法,包括了php将csv文件导入到mysql数据库的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php将csv文件导入到mysql数据库的方法。分享给大家供大家参考。具体分析如下: 本程序实现数据导入原理是先把csv文件上传到服务器,然后再通过php的fopen与fgetcsv文件把数据保存到数组,然后再用while把数据一

  • 本文向大家介绍Python之csv文件从MySQL数据库导入导出的方法,包括了Python之csv文件从MySQL数据库导入导出的方法的使用技巧和注意事项,需要的朋友参考一下 Python从MySQL数据库中导出csv文件处理 csv文件导入MySQL数据库 注: 1.csv文件的表头如: mysql的创建tb_csv表语句 这里为了省事,表中的字段都指明varchar类型 MySQL数据库写入c