在java中创建自定义SQL检查异常?

时间:2015-09-28 17:19:10

标签: java sql exception

我知道如何创建基本的自定义检查异常,但我希望能够创建检查以下内容的异常:

  1. 我基本上在DB中有一些表,在该DB中我有一个表消息,其中包含2列消息和队列。如果表 queue_table (即外键概念)中存在该队列号,我只能输入带有队列号的消息。 我希望能够检查,如果一个人从队列(在表消息中)中检索最顶层的消息(即,使用特定队列号检索最顶行),则queue_table表中存在该队列号。如果它不是我想要它触发一个名为QueueDoesNotExistException的异常。 没有例外,从queue_table中的非现有队列获取消息的查询给了我 null ,所以我不确定现有的异常是否有用。
  2. 所以我有以下内容:

    package asl.exceptions;
    
    public class QueueDoesNotExistException extends Exception {
        public QueueDoesNotExistException(){
    
    
    
        }
    }
    

    我不知道如何处理这个问题,我找不到任何资源,或者我找错了地方?

    我读到了这个: https://docs.oracle.com/javase/tutorial/jdbc/basics/sqlexception.html

    但是dint发现它很有用。

3 个答案:

答案 0 :(得分:0)

首先需要捕获JDBC驱动程序抛出的特定于DB的异常。然后你可以将它包装在你的异常中并进一步传播。 但异常驱动的逻辑很少是一个好的设计。

答案 1 :(得分:0)

您永远不应让流程到达客户尝试从不存在的队列中访问消息的程度。您在工作流中首先检查队列是否存在,并在例外情况下中止工作流,而不对队列中的消息进行第二次查询。

答案 2 :(得分:0)

根据评论,您似乎正在尝试验证查询本身,而不是确保它无法返回无效数据。显然,您还希望区分由于未在DB中记录指定队列而返回零行的查询,以及返回零行的查询,因为该队列中根本没有可用消息。我怀疑这些追求是否有用,但如果你坚持,那么这就是你可以采取的方法:

  1. 确保您的Connection未处于自动提交模式(connection.setAutoCommit(false)
  2. 尝试通过其ID从queue_table中选择指定的队列。如果失败,则回滚连接的事务并抛出您选择的异常。
  3. 否则,按照惯例执行主查询,除非它抛出,否则提交事务。
  4. 注意查询返回零行,然后处理情况是合适的。
  5. 如果您依赖于在过程中更改自动提交模式,请务必记录并恢复原始自动提交模式,包括发生异常时。
  6. 如果这看似简单或不合理,或者其他什么,我道歉。