我正在尝试使用MySQL
中的Java
来捕获特定异常。但是,它正在运行catch (SQLException ex)
而不是我想要的那个。
catch (MySQLIntegrityConstraintViolationException ex) {
}
catch (SQLException ex) {
}
获得以下错误,我希望它能运行catch (MySQLIntegrityConstraintViolationException ex)
函数。
11:12:06 AM DAO.UserDAO createUser
SEVERE: null
com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry 'idjaisjddiaij123ij' for key 'udid'
为什么它正在运行catch (SQLException ex)
而不是catch (MySQLIntegrityConstraintViolationException ex)
?
答案 0 :(得分:6)
答案 1 :(得分:2)
是MySQL
总是thow并在执行方法中捕获SQLException
。你要做的就是在执行方法中捕获SQLException
,然后抛出新的MySQLIntegrityConstraintViolationException
public void executeQuery() {
try {
// code
rs = pstmt.executeQuery();
} catch (SQLException ex) {
throw new MySQLIntegrityConstraintViolationException(ex);
}
所以在调用execute方法的外部方法中,它应该只捕获MySQLIntegrityConstraintViolationException
catch (MySQLIntegrityConstraintViolationException ex) {
//handle ex
}
答案 2 :(得分:1)
我建议使用ex instanceof MySQLIntegrityConstraintViolationException
来确保没有抛出其他异常作为MySQLIntegrityConstraintViolationException,因为抛出SQLException会有很多不同的原因。
答案 3 :(得分:0)
请导入
avg.result_display
我测试了它会起作用。
答案 4 :(得分:0)
我遇到了同样的问题,我不得不通过JOptionPane消息向用户显示错误类型。这是我的解决方法
public boolean executeQuery() {
try {
// code
rs = pstmt.executeQuery();
} catch (SQLException ex) {
int errCode = ex.getErrorCode();
if(errCode == 1062){ //MySQLIntegrityConstraintViolationException
JOptionPane.showMessageDialog(null, "Duplicate entry for id.\n");}
return false;
}