0
       Connection con;
       PreparedStatement ps,p2;


       try
       {
           sqlquery = "...";
           ps=con.prepareStatement(sqlquery);
           ps.executeUpdate();

          // using ps2...some similar process.......
       }
       catch(SQLException sqlex)
       {
              System.out.print(sqlex.getMessage());
       }

我有一个疑问,是否是

Is it possible to find out the cause of the specific error made out by a query or update such that i can handle the situation other than just displaying the error message at output console (as here) displaying the cause ?

例如:如果pspreparedStatement由于重复输入或ps由于一些外键问题等而出错。那么我应该能够具体分析sql错误using SQLException object这样我就可以相应地处理,而不仅仅是在输出控制台中显示错误消息

我需要这个的原因是因为我想显示用户在通过 GUI 场景工作时所犯的错误(以防万一:这里是 java swing)他通过分析 SQLException 实例以交互方式所做的任何错误条目......

In short , how to classify errors using a single SQLException instance

对不起,如果这个问题变得模棱两可或愚蠢..!!!

4

3 回答 3

3

如果我理解正确,您需要方法getSQLStategetErrorCodeSQLException

在这里查看更多信息。

我希望这有帮助!

于 2012-07-07T11:21:28.060 回答
2

当抛出 an 时,您可以使用实例 SQLException中的相关方法捕获错误状态、错误代码和特定消息。SQLException

  1. getErrorCode(),
  2. getSQLState(),
  3. 和任何例外的共同点getMessage()

MySQL 在
附录 C 中记录了各种常见错误和问题。错误、错误代码和常见问题,您需要在java代码中使用并相应地处理它们。

正如Vincenzo Maggio在他的回答中提到的那样,您可以根据错误状态和代码处理 SQL 异常。

请注意,这些错误状态,代码在不同的数据库实现中可能不一样。
可在此处找到各种 Oracle 错误代码(以 ORA 为前缀) 。

于 2012-07-07T11:45:22.243 回答
1

我认为解决此问题的最简单方法是使用 getErrorCode() 并基于一些预定义的代码映射到您预先定义的用户可读消息(在文件中或硬编码)获取错误代码(例如:1045) ) 以返回易于理解的消息。

一个通用的解决方案是解析 getMessage() 返回的消息,但我不认为 DBMS 抛出的异常有明确定义的语法,因此这样的解决方案不可行/可实施。

于 2012-07-07T11:22:35.763 回答