Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在sqlexception中处理MysqlIntegrity异常_Java_Jdbc - Fatal编程技术网

Java 无法在sqlexception中处理MysqlIntegrity异常

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主键自动递增,

我试图在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主键自动递增,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
    块中的代码启动一个新的
    线程
    ,并在新线程中抛出异常

但我无法理解MysqlIntegrity exception是sqlexception的一个子类,仍然无法处理如果您想要的答案不是我在下面发布的推测性答案,请共享引发异常的代码。您认为您的问题是上述
catch
块的问题的结论几乎肯定是错误的。