Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用精简驱动程序的Oracle 12c数据库连接引发IO错误_Java_Sql_Jdbc_Oracle12c_Ojdbc - Fatal编程技术网

Java 使用精简驱动程序的Oracle 12c数据库连接引发IO错误

Java 使用精简驱动程序的Oracle 12c数据库连接引发IO错误,java,sql,jdbc,oracle12c,ojdbc,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 Oracle

我遵循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>
import java.sql.*;
导入oracle.jdbc.*;
导入oracle.jdbc.pool.OracleDataSource;
类jdbc版本
{
公共静态void main(字符串args[])引发SQLException
{
OracleDataSource ods=新的OracleDataSource();
setURL(“jdbc:oracle:thin:hr/hr@localhost:1522:orcl“;
连接conn=ods.getConnection();
//创建Oracle数据库元数据对象
DatabaseMetaData meta=conn.getMetaData();
//获取驱动程序信息:
System.out.println(“JDBC驱动程序版本为”+meta.getDriverVersion());
}
} //::
我尝试了所有可能的
::
组合,但仍然得到
java.sql.SQLRecoverableException:IO错误:网络适配器无法建立连接

我已经使用教程中包含的另一个程序成功地测试了OCI驱动程序……但是这个程序无法运行。我的应用程序将使用瘦驱动程序连接到数据库,因此我的沮丧程度正在上升


非常感谢您的帮助。

我可以使用用户名/密码连接到我的容器数据库(包含我的表、包等)

返回:

JDBC driver version is 12.1.0.2.0
仍然无法连接到Oracle12c安装附带的教程“HR”PDB,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:@//localhost:1522/pdborcl.global.XXXXXXXX.com");
        ods.setUser("hr");
        ods.setPassword("hr");
        Connection conn = ods.getConnection();
        // Create Oracle DatabaseMetaData object
        DatabaseMetaData meta = conn.getMetaData();
        // gets driver info:
        System.out.println("JDBC driver version is " + meta.getDriverVersion());
}
}

仍然不明白为什么我需要完整的全局名称而不是实例名称。

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

  • 在数据库的下几个版本中,有一个版本将不再支持
    小岛屿发展中国家

  • 提及<代码>始终连接到服务。切勿使用实例名称或SID,因为它们不会指向已知的良好实例,并且SID已弃用

  • 文章中提到了语法
    jdbc:oracle:driver\u type:[用户名/密码]@//host\u name:port\u number:SID
    ,它似乎是SID和服务名称URL的混合体(以下是其他文档和您的工作示例)

  • 相比之下,javadoc只提到SID语法

  • 这两种语法都提到了


连接到PDB时,应始终在连接字符串中使用PDB的服务名称。看起来您的PDB的服务是“pdborcl.global.XXXXXXXX.com”,因此您需要使用它来直接连接PDB

我个人认为使用长URL格式更容易:

“jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=pdborcl.global.xxxxxxx.com))”

很明显,您使用的是服务名而不是SID

它的美妙之处在于,您还可以使用sqlplus轻松测试连接字符串:

sqlplus“hr/hr@(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1522))(CONNECT_DATA=(SERVICE_NAME=pdborcl.global.XXXXXXXX.com))”

如果sqlplus可以工作,那么JDBC瘦驱动程序就没有理由不工作


最后,还可以使用特权用户连接根数据库,然后执行“ALTER SESSION SET CONTAINER=pdb”切换到pdb。如果您决定这样做,您必须首先修改连接字符串以连接到根容器。它应该有自己的服务名称。

即使您提供了连接的用户名和密码,您是否也会收到相同的异常?是的,相同的错误。它需要用户名和密码吗?我读过几篇关于成功连接的冲突,是的。经过重新思考,我想例外情况会有不同的措辞。您是否检查了主机、端口和SID?您使用哪个连接URL进行OCI?OCI使用TNS,不需要其他信息。我将再次尝试使用un/pw并报告。您是否将主机、端口和SID与TNS名称中的值进行了比较?非常好,谢谢您提供的信息。我对数据库非常陌生,发现很多相互矛盾的教程。我目前正在研究:JDBC开发者指南12c第1版(12.1)
jdbc:oracle:thin:[USER/PASSWORD]@[HOST][:PORT]:SID
jdbc:oracle:thin:[USER/PASSWORD]@//[HOST][:PORT]/SERVICE