2

我的 Swing 应用程序很少抛出异常。我试图捕捉完整性约束违规异常并显示消息“重复 ID”。但是当这种情况发生时,没有在这里捕获它:catch(MySQLIntegrityConstraintViolationException ex) 它会去捕获(SQLException ex)。我想要做的是,捕获 Integrity Violation 异常并显示用户友好的消息,而不是来自 ex.getMessage() 的技术消息。我该怎么做呢?

              ShippmentTransfer shipTrns = new ShippmentTransfer(shipID, GIN, issueDate, ToStore, itemName, Qty, Driver, Vehicle);
                    int res = ShipmentTansController.addShipGIN(shipTrns);
                    if (res > 0) {
                          JOptionPane.showMessageDialog(null, "Record Added");
                          resetAll();
                    }
              } catch (DataIntegrityViolationException ex) {
                    JOptionPane.showMessageDialog(null, "Duplicate ID");

              } catch (ClassNotFoundException ex) {
                    JOptionPane.showMessageDialog(null, ex.getMessage());
              } 
              catch (SQLException ex) {
                    JOptionPane.showMessageDialog(null, ex.gets);
              }
        }
4

3 回答 3

3

为了捕获特定的 SQLException,您需要使用getSQLState()方法与 SQL 状态进行比较。例如:违反数据完整性的 SQL 状态 23。

catch (SQLException ex) {
    if (ex.getSQLState().startsWith("23")) {
        JOptionPane.showMessageDialog(null, "Duplicate");
    } 
}

从这里找到

于 2013-04-09T07:23:51.927 回答
1

你不能用

MySQLIntegrityConstraintViolationException  directly.

因为在具有该名称的 java 中没有异常可用。

试试这个

try {

}
catch (DataIntegrityViolationException ex) {
    .....
}

然后使用ex获取错误代码。然后进行比较

于 2013-04-09T06:15:29.900 回答
1

对于稍后检查的人,您可以选择将实例类型检查为:

try {
...
} catch (Exception e) {

    if (e instanceof SQLIntegrityConstraintViolationException) {
          // duplicate record or alike problem
    }
}
于 2013-06-29T18:33:42.373 回答