如何防止Jtable和MYSQL(数据库)中的重复条目?

时间:2019-03-02 22:07:43

标签: java mysql duplicates jtable try-catch

这里的主要问题是,在Jtable中检测重复项,当您第三次输入SAME / IDENTICAL数据时,重复项检测将起作用。它将无法再次运行并重复。

如何在mysql中添加唯一约束?我不知道该怎么做。请让我对如何执行

有具体说明

2nd try (duplicate)

3rd try(the detection works)

database

JAVA NETBEANS

数据库:MYSQL

我认为问题在于尝试捕获部分,这是我不理解的部分。预先谢谢您。

这里有我的代码:

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
     String first = firstname.getText();
     String last = lastname.getText();
      String gen = gender.getText();
     String strand = cboStrand.getSelectedItem().toString();
     String aged = age.getText();
     String add = address.getText();


    try{
       String sql;
       sql = "INSERT INTO idusjavanew"
                + "(fname,lname,sex,strand,age,address)"
                + "VALUES (?,?,?,?,?,?)";           
       con = DriverManager.getConnection("jdbc:mysql://localhost:3306/idusjavanew?zeroDateTimeBehavior=convertToNull","root","");
       pst = con.prepareStatement(sql);
        pst.setString(1, firstname.getText());
        pst.setString(2, lastname.getText());
        pst.setString(3, gender.getText());
        pst.setString(4, cboStrand.getSelectedItem().toString());
        pst.setString(5, age.getText());
        pst.setString(6, address.getText());

        String selectQuery; 
        selectQuery = "select * from idusjavanew where fname ='"+first+"' and lname='"+last+"'";
        System.out.println(selectQuery);
        rs = pst.executeQuery(selectQuery);
        System.out.println(rs.next());

        if (rs.next()==false){
         pst.executeUpdate();
        JOptionPane.showMessageDialog(null , "Information has been recorded!");
        showTableData();
        }
       else{

        JOptionPane.showMessageDialog(null,"Information already added!");
        showTableData();
        } 
      }   

      catch(HeadlessException | SQLException ex)
      {
          JOptionPane.showMessageDialog(null,ex);
      } 
            showTableData();


}                                        

1 个答案:

答案 0 :(得分:1)

您要在结果集上调用next()两次,在打印语句中一次,在if中一次,这是导致问题的原因。

因此,根据您当前的代码,如果您已经有一个条目,则对next()的第一次调用将指向该条目,而第二次调用将返回false。这就是为什么它在第三行条目中检测到重复项。

因此只需删除System.out.println(rs.next());,您的代码即可按预期工作。