错误表示找不到课程

时间:2016-08-12 04:33:36

标签: java

public boolean addUser(User user) throws ClassNotFoundException, SQLException {
    try {
        readWriteLock.writeLock().lock();
        String sql ="INSERT INTO User VALUES ("+0+",'"+user.getName()+"','"+user.getType()+"',AES_ENCRYPT('"+user.getPassword()+"','') ) ";
        Connection connection = DBConnection.getConnection();
        Statement stm = connection.createStatement();
        int res = stm.executeUpdate(sql);
        return res > 0;
    } finally {
        readWriteLock.writeLock().unlock();
    }
}

异常

java.rmi.UnmarshalException: Error unmarshaling return; nested exception is: 
    java.lang.ClassNotFoundException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException (no security manager: RMI class loader disabled)

无法纠正我的错误... 我远程调用这个方法.. 我不知道如何使用java

加密这样的密码

1 个答案:

答案 0 :(得分:0)

因此该方法在RMI服务器上失败并显示MySQLSyntaxErrorException,并且正在发送异常,但您没有在RMI客户端上安装MySQL JDBC驱动程序,因此它无法解析异常类,当它被ClassNotFoundException替换时,真正的错误消息会丢失。

您有几个选择:

  • 将MySQL JDBC驱动程序添加到RMI客户端的类路径中 由于RMI客户端不需要MySQL访问,这似乎是错误的解决方案。

  • 在RMI服务器上捕获异常,并抛出一个JDK内置异常,例如: SQLSyntaxErrorException
    该类将存在于RMI客户端上,因此您可以看到真正的错误。

  • 在RMI服务器上捕获异常,将错误消息记录在服务器上的日志文件中,然后抛出完全一般的异常,例如: RuntimeException("Error adding user. See log file on server")
    这将隐藏客户端的RMI服务器内部,这有助于保护服务器免受黑客攻击。