【问题标题】:Best way to load data in MySQL DB using JDBC使用 JDBC 在 MySQL DB 中加载数据的最佳方式
【发布时间】:2014-04-22 23:44:19
【问题描述】:

这是一个更大数据文件的示例数据集,我需要加载到 mysql db。问题是数据集太大,无法手动添加/附加插入语句并将逗号放在正确的位置。

E 1 T 2006-11-02 22:01:34 U 6 andrevan N 70 node_ue V 1 62 2004-09-11 05:50:00 node V 1 27 2004-09-11 06:13:00 slowking V 1 11 2004-09-11 06:50:00 merovingian V 1 34 2004-09-11 12:11:00 norm V 1 10 2004-09-11 13:30:00 anárion V 1 55 2004-09-11 15:20:00 thecustomoflife V 1 28 2004-09-11 15:21:00 neutrality V 1 8 2004-09-11 16:56:00 lst27 V 1 63 2004-09-11 18:00:00 zchangu V 1 5 2004-09-11 19:51:00 orthogonal V 1 26 2004-09-12 03:04:00 grunt V -1 25 2004-09-12 03:46:00 blankfaze V 1 56 2004-09-12 22:00:00 guanaco V 1 64 2004-09-12 22:51:00 beau99 V 1 19 2004-09-13 00:51:00 ffirehorse V 1 20 2004-09-13 01:27:00 michael V 1 7 2004-09-14 19:49:00 texture V 1 65 2004-09-16 05:01:00 friedmilk V 1 66 2004-09-17 13:56:00 ezhiki V 1 39 2004-09-18 07:34:00 squash

有人可以建议使用 JDBC 将其加载到 mysql db 中的最佳方法吗?

谢谢!

【问题讨论】:

  • 看第一行,怎么知道第二列是第二列还是第三列?
  • 您好,这是第二列。
  • 我根本不会用 JDBC 做这个。我会以某种方式将其转换为 CSV 并使用 MySQL 的 Import CSV 功能(如果有的话),或者 HeidiSQL 客户端(如果没有的话)。
  • 一次读取 100 行并批量插入。
  • 您说“数据集太大而无法手动” - 为什么不使用 awk?我会首先使用脚本重新格式化它,以便在所有字段中都有数据。然后使用另一个 awk 脚本将其转换为 CSV 或 INSERT 语句。

标签: java mysql sql jdbc


【解决方案1】:

最好的方法是使用 MySQL LOAD DATA INFILE (http://dev.mysql.com/doc/refman/5.6/en/load-data.html)。使用此方法,您可以告诉它使用制表符分隔格式并跳过前 x 行。

如果您需要从 Java 运行它,您可以将调用包装在 Java 代码中。例如,如何做到这一点,你可以看到 Pentaho 项目是如何做到的:https://github.com/pentaho/pentaho-kettle/blob/master/engine/src/org/pentaho/di/trans/steps/mysqlbulkloader/MySQLBulkLoader.java/ 或者这个简单的博客条目:http://jeffrick.com/2010/03/23/bulk-insert-into-a-mysql-database/

从经验来看,这绝对不是 JDBC 的工作,因为它会导致太多的性能瓶颈。但是,如果出于某种原因需要使用 JDBC,只需确保使用 PreparedStatement 并对行进行批处理。 Spring 有一个非常好的实现,您可以利用它。例如在这个用途上:http://www.mkyong.com/spring/spring-jdbctemplate-batchupdate-example/。当然,您还需要确保流式传输文件并相应地逐行读取以避免内存不足。

【讨论】:

  • 非常感谢 Suriyanto!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 2012-07-27
  • 2013-06-23
  • 2020-12-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多