所以,我有这个程序,并且运行正常。但我有一个问题。您不应该添加已存在于我的数组的 ID 表中的 ID。
这是我的添加按钮上的监听器代码 (laggTill) 我不知道如何使异常停止添加数据。因此,当我将字母放入我的 ID 框中时,我不认为能够添加它。但它仍然如此。通过 JOptionPane 出现并显示错误消息,但仍将其添加到数组中。我该如何阻止这种情况发生? 我虽然异常停止了一切,但显然事实并非如此。
而且我还需要 ID 检查的异常(exception)才能工作。我不知道该怎么做。我已经有一段时间没有这样做了,所以我无法弄清楚。
所以,基本上,我的问题是:如何使异常阻止数据被添加。我如何让我的类(class)检查 ID 是否唯一?
主类:
私有(private)类Listener实现ActionListener {
String getId;
@Override
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == laggTill) {
DTODjur dto = new DTODjur();
dto.djurNamn = textFieldNamn.getText();
dto.djurKategori = (String) comboBox.getSelectedItem();
try {
dto.djurID = Integer.parseInt(textFieldId.getText());
dao.laggTill(dto);
} catch (WrongDjurID ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
textArea.setText("Lade till: \nID: " + textFieldId.getText() + "\nNamn: " + textFieldNamn.getText() + "\nKategori: "+ comboBox.getSelectedItem());
}
DAO 类:
public void laggTill(DTODjur dto) throws WrongDjurID {
boolean found = false;
openDB();
try {
int djurid = dto.djurID;
String djurnamn = dto.djurNamn;
String djurkategori = dto.djurKategori;
String SQL = "INSERT INTO h12mjont_djur(djurID,djurNamn,djurKategori) VALUES('" + djurid + "','" + djurnamn + "','" + djurkategori + "')";
System.out.println(SQL);
st.executeUpdate(SQL);
found=true;
} catch (SQLException ex) {
}
if (!found) {
throw new WrongDjurID("Id ska inte innehålla bokstäver");
}else {
dtodjur = getAll();
}
closeDB();
dtodjur = getAll();
}
最佳答案
你的问题是你正在捕获异常,然后通过在捕获后编写代码来继续进行,就好像什么也没发生一样。我建议将所有 catch 逻辑移至每个方法的最后。在你的第一个 block 中将其更改为:
字符串获取Id;
@Override
public void actionPerformed(ActionEvent ae) {
if (ae.getSource() == laggTill) {
DTODjur dto = new DTODjur();
dto.djurNamn = textFieldNamn.getText();
dto.djurKategori = (String) comboBox.getSelectedItem();
try {
dto.djurID = Integer.parseInt(textFieldId.getText());
dao.laggTill(dto);
textArea.setText("Lade till: \nID: " + textFieldId.getText() + "\nNamn: " + textFieldNamn.getText() + "\nKategori: "+ comboBox.getSelectedItem());
} catch (WrongDjurID ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(null, ex.getMessage());
}
}
第二段代码:
public void laggTill(DTODjur dto) throws WrongDjurID {
openDB();
try {
int djurid = dto.djurID;
String djurnamn = dto.djurNamn;
String djurkategori = dto.djurKategori;
String SQL = "INSERT INTO h12mjont_djur(djurID,djurNamn,djurKategori) VALUES('" + djurid + "','" + djurnamn + "','" + djurkategori + "')";
System.out.println(SQL);
st.executeUpdate(SQL);
dtodjur = getAll();
} catch (SQLException ex) {
throw new WrongDjurID("Id ska inte innehålla bokstäver");
} finally {
closeDB();
}
}
现在,如果抛出异常,则 getAll() 调用将不会运行。以前,即使抛出异常,您也会运行 getAll() ,这会重新读取列表。记住在读取数据库后使用finally子句进行清理,无论读取成功还是抛出异常。
关于java - 我生疏了,不知道如何在 Java swing 中正确处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25412189/