我有一个绝对文件名列表(csv文件)。我想使用LOAD DATA LOCAL INFILE
批量插入它们。
问题:在作为批处理执行sql语句之前,我无法批量收集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通配符参数。但是,如果不使用?
通配符,那么如何才能获得绝对文件名--语句呢?
发布于 2018-05-24 14:04:15
我认为准备好的声明不像你想的那样支持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();
https://stackoverflow.com/questions/50511198
复制相似问题