如何批量插入mysql LOAD DATA?

时间:2018-05-24 13:55:50

标签: java mysql sql

我有一个绝对文件名列表(csv文件)。我想使用LOAD DATA LOCAL INFILE批量插入它们。

问题:在批量执行sql语句之前,我无法批量收集它们:

PreparedStatement ps = con.prepareStatement("LOAD DATA LOCAL INFILE ? INTO TABLE mytable");

for (String filename : filenames) {
    ps.setString(1, filename);
    ps.addBatch();
}

ps.executeBatch();
ps.commit();

结果:

  

提交1个文件时出错:参数索引超出范围(1>   参数个数,即0)

无法识别sql通配符参数。但是,如果没有?通配符,我怎么能得到绝对文件名呢?

1 个答案:

答案 0 :(得分:2)

我不认为准备好的陈述支持LOAD DATA。据我所知,查询中只有文字值可以用参数表示。但是你可以在这里使用普通的字符串连接:

String sql1 = "LOAD DATA LOCAL INFILE '";
String sql2 = "' INTO TABLE mytable";

Statement s = con.createStatement();    // use a regular statement
for (String filename : filenames) {
    String query = sql1 + filename + sql2
    s.addBatch(query);
}

s.executeBatch();
s.commit();