如何批量插入mysql加载数据?

kmpatx3s  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(360)

我有一个绝对文件名(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通配符参数。但是如果不是用 ? 通配符?

1zmg4dgp

1zmg4dgp1#

我不认为事先准备好的声明支持 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();

相关问题