java.sql.SQLException: ORA-01005: 给出的密码为空;登录被拒绝

java.sql.SQLException: ORA-01005: null password given; logon denied

我在尝试连接到数据库时遇到以下异常:

java.sql.SQLException: ORA-01005: null password given; logon denied
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:450)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:392)
        at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:385)
        at oracle.jdbc.driver.T4CTTIfun.processError(T4CTTIfun.java:938)
        at oracle.jdbc.driver.T4CTTIoauthenticate.processError(T4CTTIoauthenticate.java:480)
        at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:655)
        at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:249)
        at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:416)
        at oracle.jdbc.driver.T4CTTIoauthenticate.doOAUTH(T4CTTIoauthenticate.java:825)
        at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:596)
        at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:715)
        at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:385)
        at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:30)
        at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:564)
        at java.sql.DriverManager.getConnection(DriverManager.java:675)
        at java.sql.DriverManager.getConnection(DriverManager.java:258)
        at com.alting.db.ManagerDB.getConnection(ManagerDB.java:57)
        at com.alting.db.ManagerDB.openConnection(ManagerDB.java:75)
        at com.alting.med.EventGenerator.exportData(EventGenerator.java:220)
        at com.alting.med.Main.main(Main.java:252)

此处用于获取连接的方法:

private Connection getConnection(String url, String driverClass, String user, String password) throws ManagerDBException 
{
    try
    {
        Class.forName(driverClass);
    } catch (ClassNotFoundException e) {
        throw new ManagerDBException(e.getMessage());
    }

    try
    {
      this.connection = DriverManager.getConnection(url, user, password);
    }
    catch (SQLException e)
    {
      throw new ManagerDBException(e.getMessage());
    }
    return this.connection;
}

但即使参数(url、密码..)被硬编码,我仍然得到异常。

你能告诉我如何解决这个问题吗? 谢谢

如果您使用空字符串密码,Oracle JDBC 将认为等同于 NULL

我在使用 JDK6 时看到过这个错误,当切换到 JDK8(使用最新版本的 JDK8)时它消失了。

问题似乎与 java 启动命令行中的“-Djava.endorsed.dirs”参数有关。

删除这个,一切顺利。

这个post解决了我的问题

java.sql.SQLException: ORA-01005: null password given; logon denied

已将 -Doracle.jdbc.thinLogonCapability=o3 参数添加到 java 启动行。

在我的例子中,(所有 jar,包括 ojdbc8 都在文件夹 ./libs 中),我从

java -Djava.ext.dir=libs/ MainClass

java -cp "./libs/*" MainClass

那么问题就解决了

当外部化所有 jar 时,我遇到了与 spring 启动应用程序相同的问题。 java.ext.dirs 不适用于 oracle 驱动程序 19.x,抛出“java.sql.SQLException:ORA-01005:给出空密码;登录被拒绝”。 该应用程序在 fat-jar.

下运行良好

我能够通过“导出 CLASSPATH”解决问题。