UCanAccess ConstraintViolationException 未被捕获

问题描述

我在 Microsoft Access 数据库中的三个字段上创建了一个复合索引。如果我尝试手动添加违反索引的行,则索引有效。它也适用于 Javafx 程序,因为它会导致此异常: UCAExc::4.0.2 完整性约束冲突:唯一约束或索引冲突; CLASS_CHECKROOM 表:CLASS

我试图在应用程序不崩溃的情况下捕获此异常,但无济于事。 我试过了:

}catch (sqlException ex) {
        if(ex.getMessage().contains("integrity")) {

            Alert alertUpdateOK = new Alert(AlertType.informatION);
            alertUpdateOK.setTitle("Double Booked");
            alertUpdateOK.setContentText(ex.getMessage());
            alertUpdateOK.show();
       } 
   }

输出“No error”,然后发生异常 和:

   }catch (sqlException ex) {
        
            Alert alertUpdateOK = new Alert(AlertType.informatION);
            alertUpdateOK.setTitle("Double Booked");
            alertUpdateOK.setContentText(ex.getMessage());
            alertUpdateOK.show();
       } 
   }

这只会导致没有警报的异常并且应用程序崩溃

我见过一些涉及异常错误代码解决方案 据我了解,ucanaccess 使用 HsqlDB,我尝试过错误代码 25 58 和 104

}catch (sqlException ex) {
            if (ex.getsqlState().startsWith("25")) {        
                    
            Alert alertUpdateOK = new Alert(AlertType.informatION);
            alertUpdateOK.setTitle("Double Booked");
            alertUpdateOK.setContentText(ex.getMessage());
            alertUpdateOK.show();
            }
        }

“没有错误” PID 重复。输入不同的 PID

帮助将不胜感激。整个代码

public void insertIntoDB() throws sqlException{
        Connection connection =null;
        PreparedStatement preparedStatement = null;
        
        
        if (Integer.parseInt(start) < Integer.parseInt(finish)) {
        try {
            connection =AccessConnect.Connector();
            String sql = "INSERT INTO Class(ClassName,WeekDay,Classstart,ClassFinish,TeacherID,classAge,MaxSize,RoomID,subjectID) VALUES (?,?,?)";
            preparedStatement = connection.prepareStatement(sql);
            
            
            preparedStatement.setString(1,classname);
            preparedStatement.setString(2,weekday);
            preparedStatement.setString(3,start);
            preparedStatement.setString(4,finish);
            preparedStatement.setInt(5,teacherid);
            preparedStatement.setInt(6,classage);
            preparedStatement.setInt(7,maxsize);
            preparedStatement.setInt(8,roomid);
            preparedStatement.setInt(9,subjectid);
            
            preparedStatement.executeUpdate();
            
        }catch (sqlException ex) {
            
            Alert alertUpdateOK = new Alert(AlertType.informatION);
            alertUpdateOK.setTitle("Double Booked");
            alertUpdateOK.setContentText(ex.getMessage());
            alertUpdateOK.show();
       } 
   
        
        finally {
            if (preparedStatement != null)
                preparedStatement.close();
            if (connection !=null)
                
                connection.close();
        }
}
        
        else {
            Alert alertUpdateOK = new Alert(AlertType.informatION);
            alertUpdateOK.setTitle("Times are wrong");
            alertUpdateOK.setContentText(" The start time has to be before the end time");
            alertUpdateOK.show();
        }
    }

解决方法

我能够在警报框中捕获异常。我正在使用日食,我需要 清理项目并成功