gpt4 book ai didi

java - 区分Java中的基本SQLException类型?

转载 作者:行者123 更新时间:2023-11-29 00:11:19 25 4
gpt4 key购买 nike

有时在某些情况下命令会失败。

假设我有伪代码

try {
// insert row
} catch(SQLException ex) {
// create table
// insert row
}

我想比仅仅捕获一般的 SQLException 更具体。我想区分一下。

  • 正常错误,例如表不存在或列数不匹配。

  • 更严重的错误,例如超出存储空间或 Java 与 MySQL 之间的通信错误。

我该怎么做?我查看了错误代码或子类等各种选择,但我不确定该采用哪种方式。

我的目标数据库是 MySQL,但如果有简单的方法,我希望它是跨数据库的。 (比如只是捕获某个比SQLException更具体的类)

最佳答案

这是非常基于意见的,但我认为 SQLException 太笼统了,不能按原样使用。

据我所知,大多数访问数据库的程序不会面临处理表不存在的情况的任务,但有些情况下,例如在编写框架或工具时,检查表是否存在很重要.对于这些情况,检查所需的列是否也存在并具有正确的类型会更有意义。在这些情况下,访问数据字典是有意义的。当然前提是有字典,在某些生产产品上不是这样。

当数据字典不可用时,唯一的办法就是错误消息和错误代码,它们都是特定于供应商的。这意味着没有一种解决方案适合所有人。

很久以前我写了一个JDBCExceptionHandler,它会接收SQLException,分析它的内容并抛出一个更专业的Exception,甚至判断异常是否可恢复。最终我转向了 Hibernate,它有一组更全面的异常,再加上随着供应商改变他们的实现我厌倦了维护它。

但如果您确实想继续这一行,那么我的建议是在错误消息上使用错误代码和解析器。子类化将起作用,但仅适用于您自己的异常集。因此,有一个异常处理程序可以读取代码和消息,然后抛出您自己的一组异常,并根据您的需要对它们进行子类化。

关于java - 区分Java中的基本SQLException类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24894320/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com