我使用插入,更新,刪除,搜索和打印功能創建了一個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);
}
}
所以,在插入的PERSONID是自動生成?如果是這樣,有一種方法是當時檢索新創建的密鑰並在本地保存一個或多個密鑰。 – ChiefTwoPencils
只是爲了提出一個建議,如果你的查詢沒有返回'resultSet.get(「firstName」)'resultSet.next();'行下的任何數據使用,給你一個錯誤'java.sql.SQLException:Illegal對空結果集進行操作。「相反,我建議'if(resultSet.next()){jTextField1.setText(resultSet.getString(」firstName「)); }' –
提示:變量名爲a1,a2,a3 ...也不是好習慣。至少:將*意義*放入名稱中,如tfFirstName ...等等。那麼至少你知道那個文本域應該保留什麼。手動計數只是一個壞主意! – GhostCat