【问题标题】:"Invalid connection string format" error when trying to connect to Oracle using TNS alias that contains dot character尝试使用包含点字符的 TNS 别名连接到 Oracle 时出现“无效的连接字符串格式”错误
【发布时间】:2019-08-03 19:23:07
【问题描述】:

我正在尝试使用 TNS 连接到 Oracle 数据库。

问题是 TNS 别名包含点,所以当我这样指定 url 时:

jdbc:oracle:thin:@TNS.ALIAS

我有……

oracle.net.ns.NetException: Invalid connection string format, a valid format is: "host:port:sid"

...在创建连接期间。

我知道点字符是个问题,因为在将其从tnsnames.ora 文件中删除后,与数据库的连接工作正常。

我的问题是 - 是否有可能以某种方式转义点字符?也许可以设置一些连接参数以允许别名中的点字符?我想避免从tnsnames.ora 中删除点,因为我是从外部源获取文件。

以下是我已经尝试过的选项,它们给了我同样的错误:

jdbc:oracle:thin:@"TNS.ALIAS"
jdbc:oracle:thin:@\"TNS.ALIAS\"
jdbc:oracle:thin:@`TNS.ALIAS`
jdbc:oracle:thin:@TNS\.ALIAS - this one is not compiling
jdbc:oracle:thin:@TNS\\.ALIAS
jdbc:oracle:thin:@TNS.ALIAS
jdbc:oracle:thin:@TNS\".\"ALIAS
jdbc:oracle:thin:@TNS%2eALIAS

以下是oracle.net.ns.NetException: could not resolve the connect identifier 产生的选项:

jdbc:oracle:thin:@TNSALIAS
jdbc:oracle:thin:@TNS-ALIAS
jdbc:oracle:thin:@TNS_ALIAS

附加上下文:

  • 我正在尝试创建 Java 的 DataSource (OracleDataSource 严格)在 Scala 中(它是 Play 框架 - 但我没有使用 Play 的 创建数据库连接的方式 - 我是手动创建的)
  • 我有使用完全相同的tnsnames.ora 文件的 SQL Developer,并且它在那里工作
  • 我们的 C# 应用程序使用完全相同的 tnsnames.ora 文件并且它在那里工作(数据源定义如下:<add name="connectionName" connectionString="Data Source=TNS.ALIAS;"/>

【问题讨论】:

  • 我不知道答案。但是,如果将 something 括在双引号中会有帮助吗?如jdbc:oracle:thin:@"tns.alias"
  • @Littlefoot 感谢您的建议,但遗憾的是它给出了同样的错误
  • 那么,您是否尝试使用 String url = "jdbc:oracle:thin@\"tns.alias\""; 转义双引号?
  • @MickMnemonic - 是的,我也尝试了你的建议 - 错误是一样的
  • 你需要将System.setProperty("oracle.net.tns_admin", "C:\\app\\product\\12.2.0\\client_1\\network\\admin");设置为tnsnames.ora的位置

标签: java oracle scala jdbc tnsnames


【解决方案1】:

你需要设置

System.setProperty("oracle.net.tns_admin","C:\\app\\product\\12.2.0\\client_1\\network\\admin"); 

设置为tnsnames.ora的位置

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

public class DBConnect {
    public Connection connection;

    public DBConnect() {
    }

    public void connect() throws Exception {
        String connectString;
        System.setProperty("oracle.net.tns_admin", "C:\\app\\product\\12.2.0\\client_1\\network\\admin");
        Class.forName("oracle.jdbc.driver.OracleDriver");
        connectString = "jdbc:oracle:thin:@esmdj.test";
        System.out.println("Before DriverManager.getConnection");
        try {
            connection = DriverManager.getConnection(connectString, "scott", "tiger");
            System.out.println("Connection established");

            connection.setAutoCommit(false);
        } catch (Exception e) {
            System.out.println("Exception inside connect(): " + e);
            e.printStackTrace();
        }

    }

    public static void main(String[] args) {
        DBConnect client = new DBConnect();

        System.out.println("beginning");
        try {
            client.connect();
            System.out.println("after Connected");

            client.connection.close();

            System.out.println("after close");

        } catch (Exception e) {
            try {
                System.out.println("Exception : " + e);
                client.connection.close();
                e.printStackTrace();
            } catch (Exception ex) {
                System.out.println("Close Connection Exception : " + ex);
                ex.printStackTrace();
            }
        }

    }

}


C:\Program Files\Java\jdk1.8.0_73\bin>java -classpath  .  DBConnect
beginning
Before DriverManager.getConnection
Connection established
after Connected
after close

tnsnames.ora

esmdj.test =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.yyy.zzz)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ESMD)
    )
  )

【讨论】:

  • 我有 TNS 位置设置。但我看到您正在使用 DriverManager 创建连接(我正在使用 DataSource) - 我也会尝试使用它来查看它是否对我有任何改变
【解决方案2】:

我发现了问题 - 我使用的是旧版 Oracle 驱动程序(ojdbc7.jar 用于版本 12.1.0.1)在更改为较新的驱动程序(ojdbc8.jar 用于版本 12.2.0.1)后,TNS 别名查找开始工作 - 那里没有必要逃避任何事情

【讨论】:

    猜你喜欢
    • 2017-12-19
    • 1970-01-01
    • 2012-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 2015-03-13
    相关资源
    最近更新 更多