Java 从mysql到jdbc的自定义错误

Java 从mysql到jdbc的自定义错误,java,mysql,stored-procedures,jdbc,Java,Mysql,Stored Procedures,Jdbc,我想在mysql中编写一个存储过程,在插入表之前验证数据。 然后使用JDBC将一条自定义消息(如“Zipcode not valid”)发回Java,以便它可以显示在屏幕上。 这样的事情可能吗?无论MySQL和JDBC做什么,我认为捕获任何异常并处理向用户显示的内容都是控制器的责任 更重要的是,一路到数据库发现您输入的邮政编码错误,这是一种糟糕的用户体验。在UI中验证它。输入不应有格式问题。我只希望在有违反业务规则的情况下看到这种消息。无论MySQL和JDBC做什么,我认为捕获任何异常并处理显示

我想在mysql中编写一个存储过程,在插入表之前验证数据。 然后使用JDBC将一条自定义消息(如“Zipcode not valid”)发回Java,以便它可以显示在屏幕上。
这样的事情可能吗?

无论MySQL和JDBC做什么,我认为捕获任何异常并处理向用户显示的内容都是控制器的责任


更重要的是,一路到数据库发现您输入的邮政编码错误,这是一种糟糕的用户体验。在UI中验证它。输入不应有格式问题。我只希望在有违反业务规则的情况下看到这种消息。

无论MySQL和JDBC做什么,我认为捕获任何异常并处理显示给用户的内容是控制器的责任


更重要的是,一路到数据库发现您输入的邮政编码错误,这是一种糟糕的用户体验。在UI中验证它。输入不应有格式问题。我只希望在有违反业务规则的情况下看到这种消息。

首先,我想强调@duffymo是绝对正确的

…但如果您仍想编写这样的过程,此代码段可能会有所帮助:

delimiter ;;
CREATE PROCEDURE insert_checked_zip(zipdata int)
BEGIN
    IF (zipdata > 0) THEN
        INSERT INTO mytable (zipcode) VALUES (zipdata);
    ELSEIF
        SELECT 'zip was invalid';
    END IF;
END
;;
delimiter ;
注意:它只检查传递的zip是否大于0


请考虑在GUI级别执行这些检查-它们更便宜、速度更快(仅列出两个优点)。

首先,我想强调@duffymo绝对正确

…但如果您仍想编写这样的过程,此代码段可能会有所帮助:

delimiter ;;
CREATE PROCEDURE insert_checked_zip(zipdata int)
BEGIN
    IF (zipdata > 0) THEN
        INSERT INTO mytable (zipcode) VALUES (zipdata);
    ELSEIF
        SELECT 'zip was invalid';
    END IF;
END
;;
delimiter ;
注意:它只检查传递的zip是否大于0


请考虑在GUI级别执行这些检查-它们更便宜、更快(仅列出2个优点)我相信,不是编写SQL过程,应该考虑在触发器之前写入,每次插入之前都会触发,如果验证失败,甚至可以停止行插入。如果验证失败,甚至可以停止行插入。

谢谢。但是我有个问题。我从程序的许多地方(用例)插入值。这使我在不同的地方多次编写验证。如果我编写用于验证的存储过程,并在插入过程中简单地调用它,这个问题就会得到解决。有什么建议吗?蒂亚诺,我仍然认为你在每一个地方都需要UI验证。您是说您没有在web UI中执行任何客户端验证吗?那是一个糟糕的设计,感觉很简单。无论如何,我已经决定实施客户端检查。谢谢。但是我有个问题。我从程序的许多地方(用例)插入值。这使我在不同的地方多次编写验证。如果我编写用于验证的存储过程,并在插入过程中简单地调用它,这个问题就会得到解决。有什么建议吗?蒂亚诺,我仍然认为你在每一个地方都需要UI验证。您是说您没有在web UI中执行任何客户端验证吗?那是一个糟糕的设计,感觉很简单。无论如何,我已经决定实施客户端检查。t我不确定是否将zip表示为int。像CT这样的状态的前导零是有问题的,它不能表示zip+4。在我看来,最好使用varchar。是的,你是对的——但说实话,我真的想展示一下它是如何工作的。zip的检查也只是一个存根,它取决于zip格式和数据类型。真正的实现看起来肯定会有所不同。这是OP的工作,因为她/他知道拉链到底是什么样子的。谢谢。我决定进行客户端验证。这个答案肯定回答了我的问题。t我不确定是否将zip表示为int。像CT这样的状态的前导零是有问题的,它不能表示zip+4。在我看来,最好使用varchar。是的,你是对的——但说实话,我真的想展示一下它是如何工作的。zip的检查也只是一个存根,它取决于zip格式和数据类型。真正的实现看起来肯定会有所不同。这是OP的工作,因为她/他知道拉链到底是什么样子的。谢谢。我决定进行客户端验证。这个答案肯定回答了我的问题。泰