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