我生锈了,罐头';我不知道如何在JavaSwing中正确处理异常
所以,我有这个程序,它运行正常。但我有个问题。您不能添加已经在我的数组的ID表中的ID 这是我的添加按钮(laggTill)上侦听器的代码 我不知道如何使异常停止添加数据。例如,当我把字母放在我的ID框中时,我想我无法添加它。但它仍然存在。By JOptionPane显示upp并显示错误消息,但仍将其添加到数组中。我该如何阻止这种情况发生? 我认为异常停止了一切,但显然它没有 我还需要身份证检查的例外情况。。我不知道怎么做。。我已经有一段时间没这么做了,所以我想不出来 因此,基本上,我的问题是:如何使异常阻止数据的添加。我如何让我的类检查ID是否唯一 主要类别: 私有类侦听器实现ActionListener{我生锈了,罐头';我不知道如何在JavaSwing中正确处理异常,java,swing,exception-handling,Java,Swing,Exception Handling,所以,我有这个程序,它运行正常。但我有个问题。您不能添加已经在我的数组的ID表中的ID 这是我的添加按钮(laggTill)上侦听器的代码 我不知道如何使异常停止添加数据。例如,当我把字母放在我的ID框中时,我想我无法添加它。但它仍然存在。By JOptionPane显示upp并显示错误消息,但仍将其添加到数组中。我该如何阻止这种情况发生? 我认为异常停止了一切,但显然它没有 我还需要身份证检查的例外情况。。我不知道怎么做。。我已经有一段时间没这么做了,所以我想不出来 因此,基本上,我的问题是:
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();
}
您的问题是捕获异常,然后在捕获后编写代码,就好像什么都没有发生一样继续。我建议将所有捕获逻辑移到每个方法的末尾。在第一个块中,将其更改为: 字符串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);
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()调用即使抛出了一个将重新读取列表的异常。记住在读取数据库后使用finally子句进行清理,无论它是否成功或抛出了异常。那么,您得到的是什么SQL异常?您可以在尝试执行之前执行
Select
或Count
查询以检查id是否存在Insert
查询。好吧,谢谢!当我看到它时,这是很明显的…但是正如我所说,我已经有一段时间没有这样做了。谢谢你的帮助!