这里是一个更大的数据文件的示例数据集,我需要加载到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数据库中的最佳方法吗?
谢谢!
答案 0 :(得分:0)
最好的方法是使用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/。当然,您还需要确保流式传输文件并逐行读取,以避免内存不足。