JEE не удалось вставить в таблицу ORA-01722: неверный номер - PullRequest
0 голосов
/ 24 ноября 2018

Я изучаю динамическое веб-программирование на Java с Oracle db.

Это мой DAO для вставки данных в db

    staffID = bean.getStaffID();
    staffName = bean.getStaffName();//untuk ambil the value
    staffAddress = bean.getStaffAddress();
    staffNoTel= bean.getStaffNoTel();
    staffEmail = bean.getStaffEmail();
    staffPos = bean.getStaffPos();
    managerID = bean.getManagerID();
    password = bean.getPassword();

    try {
        currentCon = ConnectionManager.getConnection();
        ps=currentCon.prepareStatement("insert into staff (staffID,staffName,staffAddress,staffNoTel,staffEmail,staffPos,managerID,password)values(staff_id_seq.NEXTVAL,?,?,?,?,?,?,?)");
        ps.setString(1,staffID);
        ps.setString(2,staffName);
        ps.setString(3,staffAddress);
        ps.setString(4,staffNoTel);
        ps.setString(5,staffEmail);
        ps.setString(6,staffPos);
        ps.setString(7,managerID);
        ps.setString(8,password);
        ps.executeUpdate();


        System.out.println("Creating user account:");
        System.out.println("Your ID is is auto generated");
        System.out.println("Your email is " + staffEmail);
        System.out.println("Your password is " + password);


    }

Я дважды проверил запрос в sqldeveloper, и он может быть выполнен.но при работе в JEE выдается 2 сообщения об ошибке:

  1. Ошибка входа в систему: возникла исключительная ситуация!java.sql.SQLSyntaxErrorException: ORA-01722: неверный номер
  2. сбой: возникла исключительная ситуация!java.sql.SQLException: Неверный индекс столбца

Я пытался разобрать Staffid, но он продолжал выдавать мне ту же ошибку.Раньше я делал staffid без последовательности, и это не давало мне ошибки.

Вот как выглядит структура таблицы персонала:

CREATE TABLE staff(
staffid number(10),
staffname varchar2(100),
staffaddress varchar2(100),
staffnotel varchar2(20), 
staffemail varchar2(50),
staffpos varchar2(50),
managerid NUMBER(10),
password varchar2(20),

CONSTRAINT staffid_pk PRIMARY KEY(staffid),
CONSTRAINT staffname_nn CHECK (staffname IS NOT NULL),
CONSTRAINT staffadd_nn CHECK (staffaddress IS NOT NULL),
CONSTRAINT staffnotel_nn CHECK (staffnotel IS NOT NULL),
CONSTRAINT staffemail_nn CHECK (staffemail IS NOT NULL),
CONSTRAINT staffemail_uk UNIQUE(staffemail),
CONSTRAINT managerid_fk FOREIGN KEY(managerid) REFERENCES staff(staffid)
);

1 Ответ

0 голосов
/ 24 ноября 2018

Оператор вставки имеет 7 заполнителей для параметров (7 символов знака вопроса ?)

values(staff_id_seq.NEXTVAL,?,?,?,?,?,?,?)")

, пока в коде вы пытаетесь присвоить значения 8 параметрам:

ps.setString(1,staffID);
ps.setString(2,staffName);
ps.setString(3,staffAddress);
ps.setString(4,staffNoTel);
ps.setString(5,staffEmail);
ps.setString(6,staffPos);
ps.setString(7,managerID);
ps.setString(8,password);

Это приводит к ошибке SQLException: Invalid column index для последнего 8-го параметра.


Мне кажется, что вы собираетесь присвоить значение staffID, используя последовательность, если да, то изменитеВаш код Java ниже, чтобы избежать этой ошибки:

// ps.setString(1,staffID);
ps.setString(1,staffName);
ps.setString(2,staffAddress);
ps.setString(3,staffNoTel);
ps.setString(4,staffEmail);
ps.setString(5,staffPos);
ps.setString(6,managerID);
ps.setString(7,password);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...