在我的添加按钮内单击我输入了一些非常好的代码,在我的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();
}
}
答案 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()
方法时,它会抛出异常。这就是为什么你总是得到两条消息。