目录
- 一、报错如下图:
- 二、lz的环境版本
- 三、解决方式
- 四、lz报错的原因
一、报错如下图:
问题描述
lz用sqlplus或者navicat客户端连接oracle数据库正常连接,但是在项目中运行一直报错 invalid username/password; logon denied
二、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混淆使用导致了该错误。