java.sql.SQLException:指定了无效的Oracle URL错误

问题描述 投票:0回答:1

我正在尝试将Oracle数据库与JDBC驱动程序连接。我收到java.sql.SQLException:无效的Oracle URL指定的错误。请帮助我解决问题。

package test_connection;

import java.sql.*;

public class TestConnection {
    public static void main(String[] args) {
        // TODO code application logic here

        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            System.out.println("Driver loaded successfully ");
            Connection con = DriverManager.getConnection("jdbc:oracle:thin@:localhost:1521:XE", username, password);
            System.out.println("Connection established successfully ");

            con.close();
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}
java oracle jdbc sqlexception
1个回答
0
投票

[SID和service_names有两个不同的URL

对于SID"jdbc:oracle:thin:@localhost:1521:SID","username", "password"对于服务名称"jdbc:oracle:thin:@//localhost:1521/SERVICE_NAME","username", "password"

  C:\>type TestConnection.java
    //Connect db on Docker container
    //192.168.99.107
    //service name xepdb1
    //package test_connection;

    import java.sql.*;
    public class TestConnection {
        public static void main(String[] args) {
        // TODO code application logic here

        try{

        Class.forName("oracle.jdbc.driver.OracleDriver");
        System.out.println("Driver loaded successfully ");
        Connection con=DriverManager.getConnection("jdbc:oracle:thin:@//192.168.99.107:1521/XEPDB1","hr", "hr");
        System.out.println("Connection established successfully ");

C:\>javac TestConnection.java

C:\>java -cp .;ojdbc8.jar TestConnection
Driver loaded successfully
Connection established successfully

如果使用不同的URL会发生什么

C:\>type TestConnection.java
//Connect db on Docker container
//192.168.99.107
//service name xepdb1
//package test_connection;

import java.sql.*;
public class TestConnection {
    public static void main(String[] args) {
    // TODO code application logic here

    try{

    Class.forName("oracle.jdbc.driver.OracleDriver");
    System.out.println("Driver loaded successfully ");
    Connection con=DriverManager.getConnection("jdbc:oracle:thin:@192.168.99.107:1521:XEPDB1","hr", "hr");
    System.out.println("Connection established successfully ");


    con.close();


    }

    catch(Exception e){
        System.out.println(e);
    }


}
}
C:\>javac TestConnection.java

C:\>java -cp .;ojdbc8.jar TestConnection
Driver loaded successfully
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

这里是一个问题,我怎么知道我的数据库使用的是SID还是服务名称。您可以查看tnsnames.ora或tnsping

  C:\>docker exec -it xedb tnsping xepdb1

    TNS Ping Utility for Linux: Version 18.0.0.0.0 - Production on 26-MAY-2020 19:55:20

    Copyright (c) 1997, 2018, Oracle.  All rights reserved.

    Used parameter files:
    /opt/oracle/product/18c/dbhomeXE/network/admin/sqlnet.ora


    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
 (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = XEPDB1))

从上面可以看到连接使用了service_name。

上次测试与脚本"jdbc:oracle:thin@:192.168.99.107:1521:XEPDB1","hr", "hr"相同(与第二次测试相同,但在&后面加上冒号)

C:\>java -cp .;ojdbc8.jar TestConnection
Driver loaded successfully
java.sql.SQLException: Invalid Oracle URL specified
© www.soinside.com 2019 - 2024. All rights reserved.