JDBC连接Oracle 12c 错误信息ORA-28040: No matching authentication protocol

时间:2024-03-31 18:36:12

主要原因是 JDBC jar包冲突

前言:在网上找了解决方案
找到 D:\app\oracle\product\12.1.0\dbhome_1\NETWORK\ADMIN 的 sqlnet.ora文件,如果没有这个文件则创建,添加下面的参数

SQLNET.ALLOWED_LOGON_VERSION=8   

##没有sqlnet.ora文件时,再添加下面参数

SQLNET.AUTHENTICATION_SERVICES= (NTS)  

NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

但是并未解决问题。

报错原因:因为jdbc jar包冲突导致报ORA-28040

解决方案:将jdbc14 Remove留jdbc7 如图

JDBC连接Oracle 12c 错误信息ORA-28040: No matching authentication protocol

附jdbc测试代码 

package com.its.tgb.common;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

import org.apache.tomcat.util.codec.binary.Base64;

import com.its.tgb.model.SubmitReq;
import com.its.tgb.model.SubmitRsp;

public class Test {
    public static void main(String[] args) {
        /**
         * 
         jdbc:代表以jdbc的方式连接; oracle:表示连接的是oracle数据库;
         * thin:表示连接时采用thin模式(oracle中有两种模式);
         * 
         * @表示地址; 
         *        localhost:1521:orcl中localhost代表本地数据库,1521代表本地数据库端口号,orcl代表本地数据库的sid
         *        。 关于thin的解释: thin是一种瘦客户端的连接方式,即采用这种连接方式不需要安装oracle客户端,
         *        只要求classpath中包含jdbc驱动的jar包就行。thin就是纯粹用Java写的ORACLE数据库访问接口。
         *        oci是一种胖客户端的连接方式,即采用这种连接方式需要安装oracle客户端。oci是Oracle Call
         *        Interface的首字母缩写
         *        ,是ORACLE公司提供了访问接口,就是使用Java来调用本机的Oracle客户端,然后再访问数据库,优点是速度
         *        快,但是需要安装和配置数据库。
         */
        String driverName = "oracle.jdbc.driver.OracleDriver";// 加载驱动

        String dbURL = "jdbc:oracle:thin:@192.168.1.240:1521:ORCL";// localhost代表本机,也可以是
                                                                    // 127.0.0.1,可以填写具体IP
        String userName = "c##wms";// 用户名
        String Pwd = "wms";// 密码
        try {
            Class.forName(driverName);
            System.out.println("加载驱动成功!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("加载驱动失败!");
        }
        try {
            Connection dbConn = DriverManager.getConnection(dbURL, userName,
                    Pwd);
            System.out.println("连接数据库成功!");
        } catch (Exception e) {
            e.printStackTrace();
            System.out.print("数据库连接失败!");
        }
    }

}