我有一个绝对文件名列表(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通配符参数。但是,如果没有?
通配符,我怎么能得到绝对文件名呢?
答案 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();