【问题标题】:Reading and wiring CSV File into database读取 CSV 文件并将其连接到数据库
【发布时间】:2014-11-13 23:49:20
【问题描述】:

我正在实现从一个数据库到另一个数据库的特定于应用程序的数据导入功能。

我有一个包含 10000 行的 CSV 文件。这些行需要插入/更新到数据库中。

我正在使用 mysql 数据库并从 Java 插入。

可能存在这样的情况,即数据库中可能存在几行,这意味着需要更新这些行。如果数据库中不存在,则需要插入。

一种可能的解决方案是,我可以逐行阅读,检查数据库中的条目并相应地构建插入/更新查询。但是这个过程可能需要很多时间来创建更新/插入查询并在数据库中执行它们。有时我的 CSV 文件可能有数百万条记录。

还有其他更快的方法来实现这个功能吗?

【问题讨论】:

标签: java mysql csv


【解决方案1】:

在 SQL 中添加一个用于插入的存储过程。在存储过程中使用 try catch 块进行插入。如果插入失败,请进行更新。然后你可以简单地从你的程序中调用这个方法。

或者:

UPDATE Table1 SET (...) WHERE Column1='SomeValue'
IF @@ROWCOUNT=0
    INSERT INTO Table1 VALUES (...)

【讨论】:

  • 如果没有其他方法没有程序
  • 我更新了答案。我认为如果您使用实体,则有内置功能。否则上述2种方法有效。请注意,如果您有多个客户端读写,除非您锁定它,否则这两种方法都可能失败。
  • stackoverflow.com/questions/108403/… 为更强大的解决方案提供了很好的答案
  • 可以分享程序插入和更新到mysql数据库的例子
  • 我刚刚注意到您正在使用 MySQL。使用替换成
【解决方案2】:

您需要经常这样做还是偶尔一次? 我需要不时将 csv 文件加载到数据库中进行分析,并且我创建了一个带有数据流任务的 SSIS-Datasolution,该任务将 csv 文件加载到 SQL Server 上的表中。

有关更多信息,请查看此博客 http://blog.sqlauthority.com/2011/05/12/sql-server-import-csv-file-into-database-table-using-ssis/

【讨论】:

  • 您发布的精彩文章,但我想使用 java 将 csv 插入并更新到 mysql 数据库中
【解决方案3】:

我不知道您如何确定“已经存在”,但如果它是任何类型的数据库级别约束(可能在主键上?)您可以使用 REPLACE INTO 语句,该语句将创建一条记录,除非它会收到一个错误,在这种情况下它会更新阻止它被插入的记录。

它基本上就像 INSERT 一样工作:

REPLACE INTO table ( id, field1, field2 )
VALUES ( 1, 'value1', 'value'2 )

如果存在 ID 为 1 的行,则使用这些值进行更新;否则它会被创建。

【讨论】:

    【解决方案4】:

    鉴于您使用的是 MySQL,您可以使用 INSERT ... ON DUPLICATE KEY UPDATE ... 语句,其功能类似于 SQL 标准 MERGE 语句。 MYSQL doc reference heregeneral Wikipedia reference to SQL MERGE functionality here。该语句看起来像

    INSERT INTO MY_TABLE
      (PRIMARY_KEY_COL, COL2, COL3, COL4)
    VALUES
      (1, 2, 3, 4)
    ON DUPLICATE KEY
      UPDATE COL2 = 2,
             COL3 = 3,
             COL4 = 4
    

    在此示例中,我假设 PRIMARY_KEY_COL 是 MY_TABLE 上的主键或唯一键。如果 INSERT 语句由于主键或唯一键上的重复值而失败,则执行 UPDATE 子句。另请注意(在MySQL doc page 上)有一些与 InnoDB 表上的自动增量列相关的问题。

    分享和享受。

    【讨论】:

      猜你喜欢
      • 2013-09-10
      • 1970-01-01
      • 2019-05-15
      • 2020-12-18
      • 1970-01-01
      • 2019-12-10
      • 1970-01-01
      • 1970-01-01
      • 2021-05-09
      相关资源
      最近更新 更多