Jdbc 如何避免在javaFX中向数据库中插入相同的数据

Jdbc 如何避免在javaFX中向数据库中插入相同的数据,jdbc,javafx-2,Jdbc,Javafx 2,我正在尝试使用JavaFX和MySql制作一个库存管理系统。 在第一阶段,我对用户注册控件进行堆栈。 我无法停止在MySql数据库中插入相同的用户名 这是我的密码 @FXML private Label AlartLable; @FXML private TextField UsrNameTF; @FXML private TextField FullNameTF; @FXML private TextField EmailAddr

我正在尝试使用JavaFX和MySql制作一个库存管理系统。 在第一阶段,我对用户注册控件进行堆栈。 我无法停止在MySql数据库中插入相同的用户名

这是我的密码

    @FXML
    private Label AlartLable;
    @FXML
    private TextField UsrNameTF;
    @FXML
    private TextField FullNameTF;
    @FXML
    private TextField EmailAddressTF;
    @FXML
    private PasswordField PassWord;
    @FXML
    private PasswordField RepassWord;
    @FXML
    private Label passAlart;
    @FXML
    private Label passNotMatch;
    @FXML
    private Label usrLabel;
    @FXML
    private Label fullNameLabel;
    @FXML
    private Label emailAddresslbl;

    private PreparedStatement pst;
    private Connection con;
    private ResultSet rs;

    public void SignUpBtn(ActionEvent event) {

        if (isValidCondition()) {

            DBConnection toCon = new DBConnection();
            Connection connected = toCon.geConnection();

            try {
                pst = connected.prepareStatement("select * from User where UsrName = ?");
                pst.setString(1, UsrNameTF.getText());
                rs = pst.executeQuery();
                while(rs.next()){
                    if(rs.getString(1).matches(UsrNameTF.getText())){
                        AlartLable.setText("User Name already Exist");

                    }else{

                    }
                }
               AlartLable.setText("Regestration Sucess");
               reg();


            } catch (SQLException ex) {
                Logger.getLogger(RegestrationController.class.getName()).log(Level.SEVERE, null, ex);
            }

        } else {
            AlartLable.setText("");
        }
    }

    public void goToLoginPage(ActionEvent actionEvent) throws IOException {
        Parent logeIn = FXMLLoader.load(getClass().getResource("/FXMLGui/Login.fxml"));
        Scene logeInScene = new Scene(logeIn);
        Stage logInStage = (Stage) ((Node) actionEvent.getSource()).getScene().getWindow();
        logInStage.setScene(logeInScene);
        logInStage.setResizable(false);
        logInStage.show();
    }

    @Override
    public void initialize(URL url, ResourceBundle rb) {
        // TODO
    }

    private boolean isValidCondition() {
        boolean Regestration = false;
        if (nullCheck(UsrNameTF, usrLabel)
                && nullCheck(FullNameTF, fullNameLabel)
                && nullCheck(EmailAddressTF, emailAddresslbl)
                && passCheck() && passMatch()) {

            Regestration = true;

        } else {
            Regestration = false;
        }
        return Regestration;
    }

    private boolean nullCheck(TextField values, Label label) {
        boolean nullcheck = false;
        if (values.getText().trim().length() == 0) {
            label.setText("Fill it");
        } else {
            label.setText("");
            nullcheck = true;
        }
        return nullcheck;
    }

    private boolean passCheck() {
        boolean password = false;
        int myPass = PassWord.getText().length();
        if (myPass >= 5) {
            passAlart.setText("");
            password = true;
        } else {
            passAlart.setText("Min 5");
        }
        return password;
    }

    private boolean passMatch() {
        boolean passMatch = false;
        String password = PassWord.getText();
        String rePass = RepassWord.getText();

        if (password.matches(rePass)) {
            passAlart.setText("");
            passNotMatch.setText("");
            passMatch = true;

        } else {
            passNotMatch.setText("Not Match");
            passMatch = false;
        }
        return passMatch;

    }

    private void reg() {
        DBConnection newCon = new DBConnection();

        con = newCon.geConnection();

        try {
            pst = con.prepareStatement("insert into User values(?,?,?,?)");
            pst.setString(1, UsrNameTF.getText());
            pst.setString(2, FullNameTF.getText());
            pst.setString(3, EmailAddressTF.getText());
            pst.setString(4, PassWord.getText());

            pst.executeUpdate();

        } catch (SQLException ex) {

            Logger.getLogger(RegestrationController.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void clearAllTF() {
        UsrNameTF.clear();
        FullNameTF.clear();
        EmailAddressTF.clear();
        PassWord.clear();
        RepassWord.clear();
    }

}
当我尝试用我现有的用户名注册时,我认为这表明我的
用户名已经存在
但是我将数据推送到datbase中,由于usrName是唯一字段,所以给了我一个sql异常

错误

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 键“UsrName”的重复条目“rifat”


一旦检测到用户已经存在,您需要中止注册例程。添加一个
返回
AlartLable.setText(“用户名已存在”)后的语句
再试一次。非常感谢你#saina,我最近三天做这个实在太累了。最后我决定发布这篇文章,这是stackoverflow。万岁!万岁