2015-05-20 62 views
-1

在我的Add按鈕裏面點擊我輸入了一些代碼,它工作的很好,在我的try catch塊裏面我有兩個JOptionPane消息。 第一條消息是說已經成功添加了信息,而另一個位於catch塊內則表示客戶端不能在同一日期兩次添加到同一行程中。在try catch中只顯示一條錯誤消息

當我運行這個沒有任何主鍵違規的代碼時,它顯示第一條消息(這是正確的),但也顯示第二條消息。它應該只顯示第一條消息並停止。但是在顯示它添加到數據庫的兩條消息之後。

當我輸入會給主鍵違規的東西時,它會顯示添加成功的消息(這是錯誤的),然後是錯誤消息。它不會添加到數據庫中。

我在做什麼錯?

這是我的代碼。

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(); 
     } 
    }           
+1

寫下這行JOptionPane.showMessageDialog(null,「Added successfully!」);在rs = stm.executeQuery()之後; – SpringLearner

+0

由於您在實際執行jdbc查詢之前顯示了第一條消息,因此您很可能會遇到一個仍然被捕獲的「SQLException」。 – Dragondraikk

+0

這是因爲您不驗證引發了什麼異常。你在catch塊中的描述是錯誤的。 另外,在打印成功添加之前,您不驗證客戶端已添加。將該行移動到查詢執行後 – Stultuske

回答

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

後應

rs = stm.executeQuery(); 

而且在對方的回答指出,stmt.executeUpdate()應該用來代替stmt.executeQuery()。當您將更新查詢傳遞給executeQuery()方法時,它將引發異常。這就是爲什麼你總是收到兩條消息。

+0

我試過......現在它甚至不顯示添加成功消息。即使我正確輸入數據,它也會顯示錯誤 – ShanD

+0

這是因爲您正在使用'executeQuery'進行更新。更新時使用的正確方法是'executeUpdate'。 –

+0

是的,我更改爲executeUpdate(),那麼它說int不能轉換爲ResultSet – ShanD

1

首先,在執行更新之前顯示成功消息JOptionPane.showMessageDialog(null, "Added successfully!");。它應該在執行insert語句後顯示。

其次,您應該致電executeUpdate而不是executeQuery,因爲您正在執行INSERT語句。

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

我這樣做了,但它仍然不起作用 – ShanD

+0

@ShanD你應該打印你捕獲的異常的細節(在catch子句中'System.out.println(e)')。這會幫助你理解問題。 – Eran