Java MS SQL Выберите внутри вставки

#java #sql-server #select #insert

#java #sql-сервер #выберите #вставить

Вопрос:

Я хочу вставить 5 данных в одну таблицу SQL, последние четыре из которых уже работают нормально, но первая должна быть из другой таблицы, строка, дающая значение Int для таблицы, в которую я ее вставляю. И это мое решение на данный момент. Однако я все еще получаю сообщение об ошибке: «Индекс 5 находится вне диапазона».

 PreparedStatement stmt = connection.prepareStatement("INSERT INTO RECORDS (LocationId, RecId, RecValues, YearTime, HourTime) VALUES "  
                "((SELECT LocationId from Locations where Location_name = 'Mic HR1'), ?, ?, ?, ?)");
        stmt.setInt(1,1);
        stmt.setInt(2, recid);
        stmt.setInt(3, inputData);
        stmt.setDate(4, sqlDate);
        stmt.setTime(5, Time.valueOf(dtf.format(now)));
        stmt.executeUpdate();
  

Комментарии:

1. У вас есть только 4 вопросительных знака. setX Вызовы должны соответствовать этим вопросительным знакам.

2. Использование предложения SELECT с VALUES предложением a кажется плохой идеей. Я бы превратил это в INSERT INTO.... SELECT ..FROM инструкцию.

Ответ №1:

На самом деле в вашем запросе определены только четыре параметра, поскольку LocationID вычисляется с помощью предоставленного вами внутреннего выбора. Вот почему вы получаете ошибку.

Попробуйте это:

 PreparedStatement stmt = connection.prepareStatement("INSERT INTO RECORDS (LocationId, RecId, RecValues, YearTime, HourTime) VALUES "  
                "((SELECT LocationId from Locations where Location_name = 'Mic HR1'), ?, ?, ?, ?)");
        stmt.setInt(1, recid);
        stmt.setInt(2, inputData);
        stmt.setDate(3, sqlDate);
        stmt.setTime(4, Time.valueOf(dtf.format(now)));
        stmt.executeUpdate();