Я получаю сообщение java.sql.sqlexception: недопустимая ошибка индекса столбца при использовании CallableStatement - PullRequest
0 голосов
/ 21 сентября 2018

Я использую запрос вставки для CallableStatement.Это мой запрос в виде строки:

String strInsert = "INSERT INTO this_table (loc_nbr, rpt_nbr, rpt_type, office_code, date_submitted, rpt_seq, alcohol, drugs, cyber, priority) VALUES (?, ?, ?, 'HOME', sysdate, ?, ?, ?, ?, ?);";

Я использую CallableStatement:

CallableStatement cs = Connection.prepareCall(strInsert);
cs.setString(1, "'" + strLocationNumber + "'");
cs.setString(2, "'" + strReportNumber + "'");
cs.setString(3, "'" + strReportType + "'");
cs.setString(6, "'" + strReportSeq + "'");
cs.setString(7, "'" + strAlcohol + "'");
cs.setString(8, "'" + strDrugs + "'");
cs.setString(9, "'" + strCyber + "'");
cs.setString(10, "'" + strPriority + "'");
cs.execute();

После запуска я получаю java.sql.SQLException: Invalid column index

IВ настоящее время я использую Oracle для базы данных, и я хотел бы точно узнать, почему я получаю эту ошибку.

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

Это признак того, что структура таблицы и оператор вставки через Callable имеют несоответствие в столбцах, доступных и предоставленных в запросе

Java переносит это исключение, чтобы получить более глубокое представление об операторе callable / prepare / sql.

Необходима коррекция индекса заполнителя для проверки ?, а затем переместите жестко запрограммированное значение на дальний конец из промежуточного значения, например HOME and sysdate, и тогда непрерывность индекса заполнителя будет работать хорошо.

String strInsert = "INSERT INTO this_table (loc_nbr, rpt_nbr, rpt_type,  rpt_seq, alcohol, drugs, cyber, priority,office_code,date_submitted) VALUES (?, ?, ?, ?, ?, ?, ?, ?,'HOME', sysdate,);";

CallableStatement cs = Connection.prepareCall(strInsert);
cs.setString(1, "'" + strLocationNumber + "'");
cs.setString(2, "'" + strReportNumber + "'");
cs.setString(3, "'" + strReportType + "'");
cs.setString(4, "'" + strReportSeq + "'");
cs.setString(5, "'" + strAlcohol + "'");
cs.setString(6, "'" + strDrugs + "'");
cs.setString(7, "'" + strCyber + "'");
cs.setString(8, "'" + strPriority + "'");
cs.execute();
0 голосов
/ 21 сентября 2018

Предполагается, что индекс setString() относится к n-му вхождению заполнителя ?.

В вашем запросе есть два жестко закодированных значения

'HOME', sysdate

, которые не являютсясчитаются заполнителями индексов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...