gpt4 book ai didi

java - 尝试使用包含点字符的 TNS 别名连接到 Oracle 时出现 "Invalid connection string format"错误

转载 作者:行者123 更新时间:2023-11-30 01:47:41 27 4
gpt4 key购买 nike

我正在尝试使用 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 的创建数据库连接的方式 - 我正在手动执行)
  • 我有使用完全相同的 SQL Developer tnsnames.ora文件并且它正在那里工作
  • 我们有使用完全相同的 C# 应用程序 tnsnames.ora文件并且它正在那里工作(数据源定义如下: <add name="connectionName" connectionString="Data Source=TNS.ALIAS;"/>

最佳答案

您需要设置

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)
)
)

关于java - 尝试使用包含点字符的 TNS 别名连接到 Oracle 时出现 "Invalid connection string format"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57341480/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com