2016-10-21 30 views
0

我使用插入,更新,刪除,搜索和打印功能創建了一個AddressBook GUI應用程序。它連接到我的訪問數據庫表,其中包含四個表(名稱,地址,phoneNumbers和emailAddresses)如何在我的訪問數據庫中搜索新插入內容?

到目前爲止,除了當我嘗試搜索新輸入​​時,我只是插入表中。如果我搜索記錄,我直接放入訪問它的工作。

我想我縮小了這個問題,但不知道如何解決它。當我向表中插入新記錄時,名稱表將爲該記錄創建一個新的主鍵,但其餘表不會創建一個新的外鍵編號。由於我的搜索是基於內部加入身份證的我猜我的問題在於此,但我不確定。

這是我的查詢碼

if (e.getActionCommand().equals("Search")){ 
    JFrame mini = new JFrame(); 

    // Gets user input. If user presses Cancel, 'name' will be null 
    String first = JOptionPane.showInputDialog(mini,"Enter first name:"); 
    String last = JOptionPane.showInputDialog(mini, "Enter last name:"); 

    try{ 

      resultSet = statement.executeQuery("SELECT * FROM ((names INNER JOIN addresses 
        ON names.personID = addresses.addressID)INNER JOIN phoneNumbers 
        ON names.personID = phoneNumbers.phoneID) INNER JOIN emailAddresses 
        ON names.personID = emailAddresses.emailID 
        WHERE lastName LIKE '%" + last + "%' AND firstName LIKE '%" + first+"%'"); 

      resultSet.next(); 

      jTextField1.setText(resultSet.getString("firstName")); 
      jTextField2.setText(resultSet.getString("lastName")); 
      jTextField3.setText(resultSet.getString("address1")); 
      jTextField4.setText(resultSet.getString("address2")); 
      jTextField5.setText(resultSet.getString("city")); 
      jTextField6.setText(resultSet.getString("state")); 
      jTextField7.setText(resultSet.getString("zipcode")); 
      jTextField8.setText(resultSet.getString("phoneNumber")); 
      jTextField9.setText(resultSet.getString("emailAddress")); 
      jTextField10.setText(resultSet.getString("personID")); 
      jTextField10.setEditable(false); 

     } catch(SQLException sqlException) { 
      JOptionPane.showMessageDialog(null, sqlException.getMessage(), "Error", 
        JOptionPane.ERROR_MESSAGE); 
     } 

} 
+0

所以,在插入的PERSONID是自動生成?如果是這樣,有一種方法是當時檢索新創建的密鑰並在本地保存一個或多個密鑰。 – ChiefTwoPencils

+0

只是爲了提出一個建議,如果你的查詢沒有返回'resultSet.get(「firstName」)'resultSet.next();'行下的任何數據使用,給你一個錯誤'java.sql.SQLException:Illegal對空結果集進行操作。「相反,我建議'if(resultSet.next()){jTextField1.setText(resultSet.getString(」firstName「)); }' –

+0

提示:變量名爲a1,a2,a3 ...也不是好習慣。至少:將*意義*放入名稱中,如tfFirstName ...等等。那麼至少你知道那個文本域應該保留什麼。手動計數只是一個壞主意! – GhostCat

回答

0

Access使用*作爲通配符,不%

+0

以及它在我的作品。有區別嗎? –

+0

它在「返回結果」中起作用?如果您直接在Access中運行此查詢?它不會崩潰,但它應該尋找實際上是'%lastname%'而不是包含'lastname'的名稱 – SunKnight0

相關問題