Java 无法在sqlexception中处理MysqlIntegrity异常
我试图在SQL异常的catch子句中捕获MysqlIntegrityException,但它似乎无法在SQL异常的catch块中处理它。原因可能是什么以及如何解决Java 无法在sqlexception中处理MysqlIntegrity异常,java,jdbc,Java,Jdbc,我试图在SQL异常的catch子句中捕获MysqlIntegrityException,但它似乎无法在SQL异常的catch块中处理它。原因可能是什么以及如何解决 catch(SQLException e) { //not reaching here } 抱歉,无法复制此文件 以下是我在MySQL监视器中创建的一些表: mysql>创建表a(id int not null主键自动递增); 查询正常,0行受影响(0.09秒) mysql>创建表b(b_id int not null主键自动递增,
catch(SQLException e)
{
//not reaching here
}
抱歉,无法复制此文件 以下是我在MySQL监视器中创建的一些表:
mysql>创建表a(id int not null主键自动递增);
查询正常,0行受影响(0.09秒)
mysql>创建表b(b_id int not null主键自动递增,a_id int not null);
查询正常,0行受影响(0.06秒)
mysql>alter table b add constraint a_fk外键(a_id)引用a(id);
查询正常,0行受影响(0.19秒)
记录:0个重复:0个警告:0
mysql>插入a()值();
查询正常,1行受影响(0.04秒)
mysql>插入a()值();
查询正常,1行受影响(0.03秒)
mysql>插入b(a_id)值(1);
查询正常,1行受影响(0.04秒)
让我们测试外键约束是否有效:
mysql>从id=1的位置删除;
错误1451(23000):无法删除或更新父行:外键约束失败(`test`.`b`,约束`a_-fk`外键(`a_-id`)引用`a`(`id`))
然后我编写了这个Java类:
import java.sql.*;
public class MySQLExceptionTest {
public static void main(String[] args) throws Exception {
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
Connection c = DriverManager.getConnection("jdbc:mysql://localhost:3306/test", "user", "password");
PreparedStatement stmt = c.prepareStatement("DELETE FROM a WHERE id = 1");
try {
stmt.execute();
}
catch (SQLException e) {
System.out.println("Got a " + e.getClass().getName() + " with message " + e.getMessage());
}
}
}
当我运行这个类时,我得到了以下输出:
获得一个com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException,消息为无法删除或更新父行:外键约束失败(`test`.`b`,约束`a_fk`外键(`a_id`)引用`a`(`id`)
我的代码可以捕获这个异常,为什么你的代码不能?好吧,由于几乎没有任何代码,我只能提供几个推测性的答案:
- 异常在
块中的某个地方被捕获,可能会被包装并重新关闭try
块中的代码启动一个新的try
,并在新线程中抛出异常线程
catch
块的问题的结论几乎肯定是错误的。