在try catch中只显示一条错误消息

时间:2015-05-20 09:43:48

标签: java sql database jframe try-catch

在我的添加按钮内单击我输入了一些非常好的代码,在我的try catch块中我有两个JOptionPane消息。 第一条消息是说已经成功添加了信息,而另一个消息块就是说,客户端无法在同一天的同一个游览中添加两次。

当我运行此代码而没有任何主键违规时,它显示第一条消息(这是正确的),但也显示第二条消息。它应该只显示第一条消息并停止。但在显示两条消息后,它会添加到数据库中。

当我输入会导致主键违规的内容时,会显示添加成功消息(这是错误的),然后显示错误消息。它不会添加到数据库中。

我做错了什么?

这是我的代码。

 private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        DBConnection db = new DBConnection();

        if (txt_name.getText().isEmpty() || txt_escort.getText().isEmpty()) {
            JOptionPane.showMessageDialog(null, "Cannot have empty fields");
        } else {

            clientID = combo_client.getSelectedItem().toString();
            tourID = combo_tour.getSelectedItem().toString();
            date = combo_date.getSelectedItem().toString();
            escortID = txt_escort.getText();
            clientName = txt_name.getText();

            try {

                query = "INSERT INTO tourRParticipant(ClientID,Name,TourID,StartDate,EscortID) VALUES (?,?,?,?,?)";
                PreparedStatement stm = db.getconn().prepareStatement(query);
                JOptionPane.showMessageDialog(null, "Added successfully!");
                stm.setString(1, clientID);
                stm.setString(2, clientName);
                stm.setString(3, tourID);
                stm.setString(4, date);
                stm.setString(5, escortID);
                rs = stm.executeQuery();

                rs.next();

                conn.close();

            } catch (Exception e) {
                JOptionPane.showMessageDialog(null, "ERROR..Client cannot be added to the same tour with the same date");
            }

            ViewTable();
        }
    }                                        

2 个答案:

答案 0 :(得分:1)

首先,在执行更新之前显示成功消息JOptionPane.showMessageDialog(null, "Added successfully!");。它应该在执行insert语句后显示。

其次,您应该调用executeUpdate而不是executeQuery,因为您正在执行INSERT语句。

stm.executeUpdate();
JOptionPane.showMessageDialog(null, "Added successfully!");

答案 1 :(得分:0)

JOptionPane.showMessageDialog(null, "Added successfully!");

应该在

之后
rs = stm.executeQuery();

正如其他答案中所指出的,应该使用stmt.executeUpdate()代替stmt.executeQuery()。当您将更新查询传递给executeQuery()方法时,它会抛出异常。这就是为什么你总是得到两条消息。