Actionevent с Query не работает - PullRequest
       3

Actionevent с Query не работает

0 голосов
/ 09 декабря 2011

То, что я пытался сделать, это то, что когда я нажимаю кнопку «Добавить», он создает другой экземпляр, в котором внутри этого запроса есть запрос, который будет взаимодействовать с базой данных, чтобы добавить входные данные, полученные от JTextFields, и я есть еще одна проблема, она продолжает давать мне

m.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException

вот код моего действия

private class AddHandler implements ActionListener {
        public void actionPerformed(ActionEvent event) {

                Personal personal = new Personal(firstTxt.getText(),miTxt.getText(),
                                    lastTxt.getText(),dob.getText(),maritalTxt.getText(),beneTxt.getText());
                Contact contact = new Contact(telTxt.getText(),addTxt.getText(),
                                    mobTxt.getText(),emailTxt.getText());
                Employee employee = new Employee(posTxt.getText(),payTTxt.getText(),payRTxt.getText(),hireTxt.getText());

                Finance finance = new Finance();

                finance.addEmployee(personal,contact,employee);


        }
    }

Мой код добавления сотрудника

public void addEmployee(Personal p ,Contact c,Employee e) {
        Connection conn = Jdbc.dbConn();
        Statement statement = null;
        String insert1 = "INSERT INTO personal_info (`First_Name`, `Middle_Initial`, `Last_Name`, `Date_Of_Birth`, `Marital_Status`, `Beneficiaries`) VALUES ('"+p.getFirstName()+"', '"+p.getMiddleInitial()+"'" +
                "       , '"+p.getLastName()+"', '"+p.getDateOfBirth()+"', '"+p.getMaritalStatus()+"', '"+p.getBeneficiaries()+"')";
        try{
        statement = conn.createStatement();
        statement.executeUpdate(insert1);
        statement.close();
        conn.close();
        JOptionPane.showMessageDialog(null, "Employee Added!!");
        }catch(Exception ex){
            ex.printStackTrace();
        }


    }

вот список ошибок

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Cannot add or update a child row: a foreign key constraint fails (`finalpayroll`.`personal_info`, CONSTRAINT `personal_info_ibfk_1` FOREIGN KEY (`idpersonal_info`) REFERENCES `users` (`idusers`) ON DELETE CASCADE ON UPDATE CASCADE)

Если вы, ребята, задаетесь вопросом, почему у меня есть внешний ключ, я добавил к нему внешний ключ, а его внешний ключ - idUsers, если вам, ребята, интересно, почему у меня есть внешний ключ, у меня есть внешний ключ, так что если Я удаляю строку, все остальные строки в других таблицах будут удалены, но это не сработает.

1 Ответ

1 голос
/ 10 декабря 2011

Ниже приведены таблицы, я могу предположить из вашего вопроса.

users          -- idusers, other fields
personal_info  -- idpersonal_info, First_Name, Middle_Initial, Last_Name, 
                  Date_Of_Birth, Marital_Status, Beneficiaries

И я предполагаю следующее соотношение:

idusers         - primary key
idpersonal_info - foreign key referencing idusers, 
                  also, it is set to ON DELETE CASCADE, ON UPDATE CASCADE

                  You had set it as primary key with AUTO_INCREMENT also.

Из Википедии на Внешний ключ :

The values in one row of the referencing columns 
must occur in a single row in the referenced table.

Если я правильно понимаю структуру вашей таблицы, то это приведет меня к следующему выводу.

Вы вставляете новую запись в таблицу personal_info, но не указализначение для idpersonal_info, поскольку оно является основным и auto_increment.Теперь перед вставкой строки MySQL проверит установленное вами внешнее ограничение.Там он проверяет, существует ли значение idpersonal_info в поле idusers таблицы users.Поскольку вы не указываете значение для idpersonal_info, MySQL может принимать либо NULL, либо автоматически увеличиваемое значение для idpersonal_info, которое будет принято MySQL, если я не уверен.Если это займет NULL, то это не будет в таблице users, и, следовательно, нарушение ограничения внешнего ключа.Если оно принимает значение auto_incremented, есть вероятность, что оно не будет представлено в таблице users, а если его нет, нарушает ограничение внешнего ключа.

Теперь, решение, которое я могу придумать, состоит в том,Вы должны указать значение для idpersonal_info также в вашем запросе INSERT.Вы должны убедиться, что он существует и в таблице users.

Надеюсь, это поможет:)

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