目录

  • 一、报错如下图:
  • 二、lz的环境版本
  • 三、解决方式
  • 四、lz报错的原因


一、报错如下图:

问题描述
lz用sqlplus或者navicat客户端连接oracle数据库正常连接,但是在项目中运行一直报错 invalid username/password; logon denied

springboot 使用 Druid 注入 DataSource springboot druid oracle_jar

二、lz的环境版本

  • oracle19c
  • jdk1.8
  • ojdbc8.jar

三、解决方式

1、查看数据源配置信息是否用误,一定要仔细检查,如果都没有错,看第2步。

spring:
    datasource:
        druid:
            # 数据源基本配置
            driver-class-name: oracle.jdbc.driver.OracleDriver 
            url: jdbc:oracle:thin:@192.168.1.1:1521:test
            username: xz
            password: xz123456
            #Oracle需要打开注释
			validation-query: SELECT 1 FROM DUAL

2、查看oracle依赖的驱动包,以下是oracle和ojdbc jar驱动包版本对应关系,版本对应后还是报错,请看第3部。

ojdbc(6、8、14) jar包链接

oracle版本

Oracle JDBC驱动

适用JDK

Oracle 8i

classes111.zip

JDK 1.1

classes12.zip

JDK 1.2

Oracle 9i

classes111.jar

JDK 1.1

classes12.jar

JDK 1.2 和 JDK 1.3

ojdbc14.jar

JDK 1.4

Oracle 10g

classes12.jar

JDK 1.2 和 JDK 1.3

ojdbc14.jar

JDK 1.4 和 JDK 5.0

Oracle 11g

ojdbc5.jar

JDK 5.0

ojdbc6.jar

JDK 6.0

Oracle 12c

ojdbc6.jar

JDK 6.0

ojdbc7.jar

JDK 7.0 和 JDK 8.0

ojdbc8.jar

JDK 8.0

Oracle 18c

ojdbc8.jar

JDK 8.0

Oracle 19c

ojdbc8.jar

JDK 8.0

Ojdbc10.jar

JDK10

3、网上查找资料,有博客说修改用户的密码即可解决报错,lz尝试后,依然报错,所以密码又改回了xz123456,以下是登录navicat客户端后,修改oracle用户名密码的命令

alter user xz identified by xz123;//修改用户名xz的密码为xz123

4、网上查找资料,有博客说可能是用户的权限不够,lz修改用户权限后依然报错,以下是登录navicat客户端后,修改oracle用户权限的命令

#给xz用户授权,connect,resource,dba 分别三种不同操作权限
grant connect,resource,dba to xz

5、因此lz特意写了一个测试数据库连接的测试类,debug运行后,建立数据库连接行还是报 invalid username/password; logon denied错误,说明用户名和密码是没有问题的,代码如下:

package com.rf.springcloud.cloudsystem.modules;

import java.sql.Connection;
import java.sql.DriverManager;

/**
 * @description:
 * @author: xz
 */
public class Test {
    public static void main(String[] args) {
        try {
            //装载驱动程序
            Class.forName("oracle.jdbc.driver.OracleDriver");
            //建立数据库连接
            Connection con = DriverManager.getConnection("jdbc:oracle:thin:@192.168.1.1:1521:1521:test","xz","xz123456");
            System.out.println("11");
            //释放数据库资源,注意顺序
            con.close();
        }
        catch (Exception e) {
            e.printStackTrace(System.out);
        }
    }

}

6、此方式解决了lz的报错问题,首先了解下oracle数据库url的写法有两种

  • 第一种
//监听sid服务,表示sid为orcl
database.url=jdbc:oracle:thin:@192.168.1.1:1521:orcl
  • 第二种
//监听服务名,表示服务名为test
database.url=jdbc:oracle:thin:@171.xxx.96.xx:xxxx/test
  • 所以发现是自己的sid写错导致出现这个错误,把服务名当做了sid,把test的 “ : ” 改为 “ / ” 访问正常。
  • 以下是正常的数据源配置
spring:
    datasource:
        druid:
            # 数据源基本配置
            driver-class-name: oracle.jdbc.driver.OracleDriver 
            url: jdbc:oracle:thin:@192.168.1.1:1521/test
            username: xz
            password: xz123456
            #Oracle需要打开注释
			validation-query: SELECT 1 FROM DUAL

四、lz报错的原因

  • 服务名和sid混淆使用导致了该错误。