繁体   English   中英

无法通过JDBC连接到虚拟机上的Oracle 11g:连接重置

[英]Unable to connect to Oracle 11g on virtual machine via JDBC: Connection reset

我在装有VMware Workstation和Oracle Linux 5.5的笔记本电脑上安装了Windows 7。 Linux上有Oracle 11g r2数据库,我需要使用NAT建立从主机(Win7)到来宾系统(Linux)上通过JDBC的JDBC连接。 因此,我在Windows上运行了以下Java代码:

public static void main(String[] args) {
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
    Connection con;
    try{
        con = DriverManager.getConnection("jdbc:oracle:thin:@172.68.0.1:1521:orcl", "system","oracle");
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

我得到这个例外:

java.sql.SQLRecoverableException: I/O Exception: Connection reset
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:428)
    at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:536)
    at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:228)
    at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
    at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:521)
    at java.sql.DriverManager.getConnection(DriverManager.java:571)
    at java.sql.DriverManager.getConnection(DriverManager.java:215)
    at OracleTest.main(OracleTest.java:15)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:134)
Caused by: java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(SocketInputStream.java:196)
    at java.net.SocketInputStream.read(SocketInputStream.java:122)
    at oracle.net.ns.Packet.receive(Packet.java:283)
    at oracle.net.ns.NSProtocol.connect(NSProtocol.java:287)
    at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1054)
    at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:308)
    ... 12 more

在Windows上,我为VMware Network Adapter VMnet8分配了IPv4地址172.68.0.1。 这是我在VMWare中为Virtual Network Editor设置以及在Linux上的网络配置的图片:

http://i.cubeupload.com/vAen5q.jpg

在Linux上,我还有:

listener.ora中:

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.68.0.1)(PORT = 1521))
    )
  )

ADR_BASE_LISTENER = /u01/app/oracle

tnsnames.ora中:

ORCL =    
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 172.68.0.1)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  ) 

因此,我需要找出问题所在以及如何解决。 请帮忙。

已经很晚了,但是我找到了解决方案。

  1. 在Oracle VM VirtualBox Manager中,您必须转到“全局工具”,然后创建一个新适配器
  2. 它会自动提供一个IPv4地址,您可以使用该地址进行连接,但是首先您必须更改虚拟机的设置,
  3. 选择您的VM,例如Windows 10,然后按Settings(设置),现在转到Network(网络),然后在Attached to(附加到)中选择Host-only Adapter(仅主机适配器),在名称中选择您创建的适配器,然后按Ok(确定)。
  4. 运行您的虚拟机。
  5. 在Java中,您可以使用以下命令:

    connection.setUrl( “JDBC:预言:瘦:@ IPv4Address:1521:XE”);

    connection.setUser( “例如”);

    connection.setPassword( “通”);

完成所有步骤后,您可以从主机连接到虚拟机中的数据库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM