java - 使用瘦驱动程序的 Oracle 12c 数据库连接引发 IO 错误

标签 java sql jdbc oracle12c ojdbc

我正在遵循 JDBC 开发人员指南,并尝试使用简短的 java 程序测试 JDBC 瘦驱动程序连接。

import java.sql.*;
import oracle.jdbc.*;
import oracle.jdbc.pool.OracleDataSource;
class JDBCVersion
{
public static void main (String args[]) throws SQLException
{
        OracleDataSource ods = new OracleDataSource();
        ods.setURL("jdbc:oracle:thin:hr/hr@localhost:1522:orcl");
        Connection conn = ods.getConnection();
        // Create Oracle DatabaseMetaData object
        DatabaseMetaData meta = conn.getMetaData();
        // gets driver info:
        System.out.println("JDBC driver version is " + meta.getDriverVersion());
}
} //<host>:<port>:<service>

我已经尝试了一切可能的<host>:<port>:<service>组合但仍然得到 java.sql.SQLRecoverableException: IO Error: The Network Adapter could not establish the connection

我已经使用教程中包含的另一个程序成功测试了 OCI 驱动程序......但无法让这个程序工作。我的应用程序将使用瘦驱动程序连接到数据库,所以我的挫败感是......攀爬。

感谢任何帮助。

最佳答案

也许下面的注释可以解释为什么您需要服务名称而不是 URL 中的 SID。

  • Oracle JDBC FAQ提及数据库接下来的几个版本之一将停止支持 SID

  • Oracle JDBC devolopers guide提及始终连接到服务。切勿使用instance_name或SID,因为它们不会定向到已知的良好实例,并且SID已被弃用

  • Oracle 2 day + Java developer tutorial提到语法 jdbc:oracle:driver_type:[username/password]@//host_name:port_number:SID 它似乎是 SID 和服务名称 URL 的混合(遵循其他文档和您的工作示例)

  • 相比之下 OracleDriver 的 javadoc仅提及 SID 语法

  • Oracle FAQ wiki提及这两种语法

.

jdbc:oracle:thin:[USER/PASSWORD]@[HOST][:PORT]:SID
jdbc:oracle:thin:[USER/PASSWORD]@//[HOST][:PORT]/SERVICE

关于java - 使用瘦驱动程序的 Oracle 12c 数据库连接引发 IO 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29638552/

相关文章:

java - Json 解析器 - 需要跳过几个字符并解析 - java

java - 练习考试中模棱两可的循环

java - 尽管我生成的查询工作正常,但为什么 JDBC-MySQL 会在 SQL 语法中抛出错误?

php - SQL 查询按时间戳分组和排序

java - java中的PreparedStatement.addBatch有什么限制吗?

java - 连接到 JDBC 时使用 getColumnClass() 对 JTable 进行排序

java - 如何在 Scala 或 Java 中读取具有混合编码的文本文件?

java - 获取给定日期范围内月份的开始日期和结束日期

php - Sphinx 实时索引 UPDATE 语句不影响所有行

sql - 使用 Clojure 连接到 Microsoft SQL Server