Как пакетно вставить MySQL ЗАГРУЗИТЬ ДАННЫЕ?

0

У меня есть список абсолютных имен файлов (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
    LOAD DATA недопустима для подготовленного заявления. Он не найден в списке «Синтаксис SQL, разрешенный в подготовленных выражениях», который приведен здесь: dev.mysql.com/doc/refman/5.7/en/…
Теги:

1 ответ

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();

Ещё вопросы

Сообщество Overcoder
Наверх
Меню